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;
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 لسنا بحاجة هذه الدالة لكننا مجبرين على أن نفعل لها
// يتم تنفيذ أي أوامر نضعها هنا مباشرةً عندما يقوم المستخدم بالنقر على أي حرف من لوحة المفاتيح و قبل أن يرفع إصبعه
public void keyTyped(KeyEvent ke) { }
// Override لسنا بحاجة هذه الدالة لكننا مجبرين على أن نفعل لها
// يتم تنفيذ أي أوامر نضعها هنا في حال أبقى المستخدم إصبعه على زر معين مما جعل هذا الزر يطبع الحرف أكثر من مرة
public void keyPressed(KeyEvent ke) { }
// يتم تنفيذ أي أوامر نضعها هنا بعد أن يتم كتابة الحرف الذي قام المستخدم بالنقر عليه من لوحة المفاتيح. أو عندما يرفع إصبعه عن أي زر
public void keyReleased(KeyEvent ke) {
chars.setText("Chars: " + textArea.getText().length()); // chars كنص للكائن JTextArea هنا وضعنا عدد أحرف الكائن
lines.setText("Lines: " + textArea.getLineCount()); // lines كنص للكائن JTextArea هنا وضعنا عدد أسطر الكائن
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 Main {
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 هنا وضعنا عدد أسطر الكائن
}
});
}
}