package GUIAnwendungen.Beispiele;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
 
public class TextAreaBeispiel2 {
 
    static JFrame frame = new JFrame("JTextArea demo");         // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من الكلاس
    static JTextArea textArea = new JTextArea();                // textArea إسمه Text Area هنا أنشأنا
    static JScrollPane scrollPane = new JScrollPane(textArea);  // بداخله textArea و وضعنا الـ Scroll Pane أي قمنا بإنشاء JScrollPane هنا أنشأنا كائن من الكلاس
    static JLabel chars = new JLabel("Chars: 0");                         // و الذي سنستخدمه لعرض عدد الأحرف chars فارغ إسمه Label هنا أنشأنا
    static JLabel lines = new JLabel("Lines: 0");                         // و الذي سنستخدمه لعرض عدد الأسطر lines فارغ إسمه Label هنا أنشأنا
 
    public static void main(String[] args) {
 
        scrollPane.setBounds(40, 40, 310, 150);                 // frame في الـ scrollPane هنا قمنا بتحديد حجم و موقع الكائن
 
        chars.setBounds(40, 210, 70, 30);                       // frame في الـ chars هنا قمنا بتحديد حجم و موقع الكائن
        lines.setBounds(160, 210, 70, 30);                      // frame في الـ lines هنا قمنا بتحديد حجم و موقع الكائن
 
        textArea.setLineWrap(true);                             // ينزل على سطر جديد في حال كان عدد الأحرف المدخلة أكبر من عدد الأحرف التي يستطيع السطر إستيعابها textArea هنا جعلنا النص الذي ندخله في كائن الـ
        textArea.setWrapStyleWord(true);                        // هنا جعلنا الكلمة تظهر على سطر جديد في حال كانت لا تسع في السطر
 
        frame.add(scrollPane);                                  // frame في الـ scrollPane هنا أضفنا الكائن
        frame.add(chars);                                       // frame في الـ chars هنا أضفنا الكائن
        frame.add(lines);                                       // frame في الـ lines هنا أضفنا الكائن
 
        frame.setSize(400, 300);                                // هنا قمنا بتحديد حجم النافذة. عرضها 400 و طولها 300
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   // هنا جعلنا زر الخروج من النافذة يغلق البرنامج
        frame.setLayout(null);                                  // لذلك قمنا بتحديد مكان كل شيء قمنا بإضافته في النافذة Layout Manager أي لم نستخدم أي null هنا وضعنا
        frame.setVisible(true);                                 // هنا جعلنا النافذة مرئية
 
 
        // textArea يتم إستدعاء هذه الدالة بشكل تلقائي كلما تم إدخال أو حذف حرف في كائن الـ
        textArea.addKeyListener(new KeyListener() {
 
            // Override لسنا بحاجة هذه الدالة لكننا مجبرين على أن نفعل لها
            // يتم تنفيذ أي أوامر نضعها هنا مباشرةً عندما يقوم المستخدم بالنقر على أي حرف من لوحة المفاتيح و قبل أن يرفع إصبعه
            @Override
            public void keyTyped(KeyEvent ke) { }
 
            // Override لسنا بحاجة هذه الدالة لكننا مجبرين على أن نفعل لها
            // يتم تنفيذ أي أوامر نضعها هنا في حال أبقى المستخدم إصبعه على زر معين مما جعل هذا الزر يطبع الحرف أكثر من مرة
            @Override
            public void keyPressed(KeyEvent ke) { }
 
            // يتم تنفيذ أي أوامر نضعها هنا بعد أن يتم كتابة الحرف الذي قام المستخدم بالنقر عليه من لوحة المفاتيح. أو عندما يرفع إصبعه عن أي زر
            @Override
            public void keyReleased(KeyEvent ke) {
                chars.setText("Chars: " + textArea.getText().length());         // chars كنص للكائن JTextArea هنا وضعنا عدد أحرف الكائن
                lines.setText("Lines: " + textArea.getLineCount());             // lines كنص للكائن JTextArea هنا وضعنا عدد أسطر الكائن
            }
 
        });
 
    }
 
}