Swing - الكلاس JTextArea

Java Swing الكلاس JTextArea

مقدمة الكلاس JTextArea 

الكلاس JTextArea يستخدم لإضافة مربع نص كبير يتألف من أكثر من سطر (Text Area) في واجهة المستخدم.


بنا الكلاس JTextArea 

public class JTextArea
extends JTextComponent
implements SwingConstants
	

كونستركتورات الكلاس JTextArea

الجدول التالي يحتوي على كونستركتورات الكلاس JTextArea.

الكونستركتور مع تعريفه
public JTextArea() ينشئ كائن من الكلاس JTextArea يمثل Text Area فارغ.
public JTextArea(String text) ينشئ كائن من الكلاس JTextArea يمثل Text Area فيه نص.
مكان الباراميتر text نمرر النص الذي نريد وضعه بداخل الـ Text Area.
public JTextArea(int rows, int columns) ينشئ كائن من الكلاس JTextArea يمثل Text Area له عدد محدد من الأسطر و الأحرف.
  • مكان الباراميتر rows نمرر رقم يمثل عدد أسطر الـ Text Area.

  • مكان الباراميتر columns نمرر رقم يمثل عدد الأحرف الأقصى التي يمكن إدخالها في كل سطر.


يرمي الإستثناء IllegalArgumentException في حال تم تمرير عدد أصغر من 0 مكان الباراميتر rows أو rows.
public JTextArea(String text, int rows, int columns) ينشئ كائن من الكلاس JTextArea يمثل Text Area له عدد محدد من الأسطر و الأحرف.
  • مكان الباراميتر text نمرر النص الذي نريد وضعه بداخل الـ Text Area.

  • مكان الباراميتر rows نمرر رقم يمثل عدد أسطر الـ Text Area.

  • مكان الباراميتر columns نمرر رقم يمثل عدد الأحرف الأقصى التي يمكن إدخالها في كل سطر.


يرمي الإستثناء IllegalArgumentException في حال تم تمرير عدد أصغر من 0 مكان الباراميتر rows أو rows.

دوال الكلاس JTextArea

الجدول التالي يحتوي على بعض دوال الكلاس JTextArea.

الدالة مع تعريفها
public String getText() ترجع نص كائن الـ JTextArea الذي قام بإستدعائها كـ String.
public void setText(String text) تستخدم لتبديل نص كائن الـ JTextArea الذي قام بإستدعائها.
مكان الباراميتر text نضع النص الجديد.
public int getRows() ترجع رقم يمثل عدد الأسطر الظاهرة في كائن الـ JTextArea الذي قام بإستدعائها.
public void setRows(int rowsNumber) تستخدم لتحديد عدد أسطر كائن الـ JTextArea الذي قام بإستدعائها.
مكان الباراميتر rowsNumber نضع عدد الأسطر الجديد.

ترمي الإستثناء IllegalArgumentException في حال تم إعطاءها عدد أصغر من 0.
public int getLineCount() ترجع رقم يمثل عدد جمع الأسطر الموجودة في كائن الـ JTextArea الذي قام بإستدعائها سواء كانت ظاهرة أو غير ظاهرة.
public void setCols(int columnsNumber) تستخدم لتحديد عدد الأحرف الأقصى التي يمكن إدخالها في كل سطر في كائن الـ JTextArea الذي قام بإستدعائها.
مكان الباراميتر columnsNumber نضع عدد الأحرف الجديد.

ترمي الإستثناء IllegalArgumentException في حال تم إعطاءها عدد أصغر من 0.
public void setLineWrap(boolean wrapLine) تستخدم لجعل محتوى كائن الـ JTextArea الذي قام بإستدعائها يظهر على سطر جديد في حال كان عدد الأحرف الموجود في السطر أكبر من عدد الأحرف التي يمكن وضعها فيه.
مكان الباراميتر wrapLine نضع القيمة true لتفعيل هذه الخاصية.

ملاحظة: يجب إستدعاء الدالة setWrapStyleWord() مباشرةً بعد إستدعاء هذه الدالة حتى لا يتم وضع الكلمة الواحدة على سطرين في حال كان عدد الأحرف الموجود في السطر أكبر من عدد الأحرف التي يمكن وضعها فيه.
public void setWrapStyleWord(boolean wrapWord) من المهم جداً إستدعاء هذه الدالة بعد إستدعاء الدالة setLineWrap() حتى لا يتم تجزئة الكلمة على سطرين في حال كان عدد الأحرف الموجود في السطر أكبر من عدد الأحرف التي يمكن وضعها فيه.
مكان الباراميتر wrapWord نضع القيمة true لتفعيل هذه الخاصية.
public void insert(String str, int pos) تستخدم لإضافة نص في مكان محدد في كائن الـ JTextArea الذي قام بإستدعائها.
  • مكان الباراميتر str نضع النص الذي نريد إضافته.

  • مكان الباراميتر pos نضع رقم Index يمثل المكان الذي سيتم فيه وضع النص.


ترمي الإستثناء IllegalArgumentException في حال وضعنا مكان الباراميتر pos عدد أصغر أو أكبر من عدد الأحرف الموجودة في كائن الـ JTextArea الذي قام بإستدعائها.
public void append(String str) تستخدم لإضافة النص الذي نمرره لها مكان الباراميتر str في آخر النص الموجود في كائن الـ JTextArea الذي قام بإستدعائها.
public void addActionListener(ActionListener al) تستخدم لتنفيذ أوامر معينة عند النقر داخل كائن الـ JTextArea الذي قام بإستدعائها.
مكان الباراميتر al نضع كائن من الكلاس ActionListener و نفعل بداخله Override لدالة إسمها actionPerformed(ActionEvent ae).
public void removeActionListener(ActionListener al) تستخدم لعدم تنفيذ أوامر الدالة addActionListener() من جديد عند النقر بداخل كائن الـ JTextArea الذي قام بإستدعائها.

أمثلة شاملة JTextArea


Java Swing طريقة إنشاء JTextArea

المثال التالي يعلمك طريقة إنشاء كائن من الكلاس JTextArea و إضافته في النافذة.


مثال طريقة إنشاء كائن من الكلاس JTextArea و إضافته في النافذة.

Main.java
      import javax.swing.JFrame;
      import javax.swing.JTextArea;

      public class Main {

      public static void main(String[] args) {

      JFrame frame = new JFrame("JTextArea demo");              // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من الكلاس
      frame.setSize(300, 250);                                  // هنا قمنا بتحديد حجم النافذة. عرضها 300 و طولها 250
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     // هنا جعلنا زر الخروج من النافذة يغلق البرنامج
      frame.setLayout(null);                                    // في النافذة بنفسنا Text Area لذلك سنقوم بتحديد مكان الـ Layout Manager أي لم نستخدم أي null هنا وضعنا

      JTextArea textArea = new JTextArea("Enter anything");     // Text Area أي قمنا بإنشاء JTextArea هنا أنشأنا كائن من الكلاس
      textArea.setBounds(40, 40, 200, 100);                     // frame في الـ Text Area هنا قمنا بتحديد حجم و موقع الـ

      frame.add(textArea);                                      // frame في الـ textArea هنا أضفنا الـ

      frame.setVisible(true);                                   // هنا جعلنا النافذة مرئية

      }

      }
    

ستظهر لك النافذة التالية عند التشغيل.

طريقة إضافة JTextArea في ال JFrame في جافا


Java Swing طريقة تغيير نوع و لون و حجم خط الـ JTextArea

المثال التالي يعلمك طريقة تغيير نوع و حجم و لون الخط لكائن الـ JTextArea.


مثال طريقة تغيير نوع و حجم و لون الخط لكائن الـ JTextArea.

Main.java
      import java.awt.Color;
      import javax.swing.JFrame;
      import javax.swing.JTextArea;
      import java.awt.Font;

      public class Main {

      public static void main(String[] args) {

      JFrame frame = new JFrame("JTextArea demo");            // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من الكلاس

      JTextArea textArea = new JTextArea();                   // textArea إسمه JtextArea هنا قمنا بإنشاء

      Font newFont = new Font("Arial", Font.BOLD, 16);        // حجمه 16 Arial يمثل نوع خط عريض إسمه Font هنا أنشأنا كائن من الكلاس

      textArea.setBounds(40, 40, 200, 100);                   // frame في الـ Text Area هنا قمنا بتحديد حجم و موقع الـ
      textArea.setFont(newFont);                              // newFont يستخدم الـ textArea هنا جعلنا الـ
      textArea.setForeground(Color.blue);                     // أزرق textArea هنا جعلنا لون خط الـ
      textArea.setText("Blue\nText\nArea");                   // textArea هنا قمنا بإدخال نص بداخل الـ

      frame.add(textArea);                                    // frame في الـ textArea هنا أضفنا الـ

      frame.setSize(300, 250);                                // هنا قمنا بتحديد حجم النافذة. عرضها 300 و طولها 250
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   // هنا جعلنا زر الخروج من النافذة يغلق البرنامج
      frame.setLayout(null);                                  // الذي قمنا بإضافته سابقاً Text Area لذلك قمنا بتحديد مكان الـ Layout Manager أي لم نستخدم أي null هنا وضعنا
      frame.setVisible(true);                                 // هنا جعلنا النافذة مرئية

      }

      }
    

ستظهر لك النافذة التالية عند التشغيل.

تغيير لون و حجم و نوع خط ال JtextArea في جافا


Java Swing طريقة جعل نص الـ JTextArea يظهر على سطر جديد عند الحاجة

في لغة جافا الـ Text Area لا يراعي النص الذي نضعه بداخله بشكل تلقائي.
فمثلاً في حال كان عدد الأحرف المدخلة أكبر من عدد الأحرف التي يمكن له إستيعابها في كل سطر, لن يظهر كل النص الذي تم إدخاله.

طريقة جعل النص يظهر بداخل ال jtextarea في ال JFrame


المثال التالي يعلمك طريقة جعل محتوى كائن الـ JTextArea ينزل بشكل تلقائي على سطر جديد عند الحاجة.


مثال طريقة جعل محتوى كائن الـ JTextArea ينزل بشكل تلقائي على سطر جديد عند الحاجة.

Main.java
      import javax.swing.JFrame;
      import javax.swing.JTextArea;
      import javax.swing.JScrollPane;

      public class Main {

      public static void main(String[] args) {

      JFrame frame = new JFrame("JTextArea demo");              // أي قمنا بإنشاء نافذة مع وضع عنوان لها JFrame هنا أنشأنا كائن من الكلاس
      frame.setSize(300, 250);                                  // هنا قمنا بتحديد حجم النافذة. عرضها 300 و طولها 250
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     // هنا جعلنا زر الخروج من النافذة يغلق البرنامج
      frame.setLayout(null);                                    // في النافذة بنفسنا Text Area لذلك سنقوم بتحديد مكان الـ Layout Manager أي لم نستخدم أي null هنا وضعنا

      JTextArea textArea = new JTextArea("Enter anything");     // Text Area أي قمنا بإنشاء JTextArea هنا أنشأنا كائن من الكلاس
      textArea.setLineWrap(true);                               // ينزل على سطر جديد في حال كان عدد الأحرف المدخلة أكبر من عدد الأحرف التي يستطيع السطر إستيعابها textArea هنا جعلنا النص الذي ندخله في كائن الـ
      textArea.setWrapStyleWord(true);                          // هنا جعلنا الكلمة تظهر على سطر جديد في حال كانت لا تسع في السطر

      JScrollPane scrollPane = new JScrollPane( textArea );     // بداخله textArea و وضعنا الـ Scroll Pane أي قمنا بإنشاء JScrollPane هنا أنشأنا كائن من الكلاس
      scrollPane.setBounds(40, 40, 200, 100);                   // أيضاً textArea و بالتالي كأننا قمنا بتحديد حجم الـ .frame في الـ scrollPane هنا قمنا بتحديد حجم و موقع الـ
      frame.add(scrollPane);                                    // frame في الـ scrollPane هنا أضفنا الـ

      frame.setVisible(true);                                   // هنا جعلنا النافذة مرئية

      }

      }
    

ستظهر لك النافذة التالية عند التشغيل. لتجربته قم بإدخال أي نص.

و لاحظ أنه سيعرض النص المدخل في الـ Text Area بشكل مرتب و لا يوجد كلمات مقطوعة ( بمعنى أن جزء من الكلمة ظاهر في سطر و جزء منها في سطر ثاني ).

ثم لاحظ أنه يظهر Scroll Bar عندما يصبح عدد الأسطر المدخلة أكبر من عدد الأسطر التي يمكنها أن تظهر بداخله أمام المستخم.

طريقة جعل النص يظهر بداخل ال jtextarea في جافا


Java Swing طريقة الحصول على النص المدخل في JTextArea

المثال التالي يعلمك طريقة الحصول على النص المدخل في الـ Text Area.


مثال طريقة الحصول على النص المدخل في الـ Text Area.

Main.java
      import java.awt.event.ActionEvent;
      import java.awt.event.ActionListener;
      import javax.swing.JButton;
      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 label = new JLabel("Enter any thing");        // label إسمه Label هنا أنشأنا
      static JLabel labelResult = new JLabel();                   // فارغ labelResult إسمه Label هنا أنشأنا
      static JButton button = new JButton("Get text");            // button إسمه Button هنا أنشأنا

      public static void main(String[] args) {

      label.setBounds(40, 40, 100, 30);                       // frame في الـ label هنا قمنا بتحديد حجم و موقع الكائن
      scrollPane.setBounds(150, 40, 200, 100);                // frame في الـ scrollPane هنا قمنا بتحديد حجم و موقع الكائن
      button.setBounds(40, 160, 80, 30);                      // frame في الـ button هنا قمنا بتحديد حجم و موقع الكائن
      labelResult.setBounds(40, 200, 340, 30);                // frame في الـ labelResult هنا قمنا بتحديد حجم و موقع الكائن

      textArea.setLineWrap(true);                             // ينزل على سطر جديد في حال كان عدد الأحرف المدخلة أكبر من عدد الأحرف التي يستطيع السطر إستيعابها textArea هنا جعلنا النص الذي ندخله في كائن الـ
      textArea.setWrapStyleWord(true);                        // هنا جعلنا الكلمة تظهر على سطر جديد في حال كانت لا تسع في السطر

      frame.add(label);                                       // frame في الـ label هنا أضفنا الكائن
      frame.add(scrollPane);                                  // frame في الـ scrollPane هنا أضفنا الكائن
      frame.add(button);                                      // frame في الـ button هنا أضفنا الكائن
      frame.add(labelResult);                                 // frame في الـ labelResult هنا أضفنا الكائن

      frame.setSize(400, 300);                                // هنا قمنا بتحديد حجم النافذة. عرضها 400 و طولها 300
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   // هنا جعلنا زر الخروج من النافذة يغلق البرنامج
      frame.setLayout(null);                                  // لذلك قمنا بتحديد مكان كل شيء قمنا بإضافته في النافذة Layout Manager أي لم نستخدم أي null هنا وضعنا
      frame.setVisible(true);                                 // هنا جعلنا النافذة مرئية

      button.addActionListener(new ActionListener() {         // button هنا نضع الأوامر التي نريد تنفيذها عند النقر على الزر
      @Override
      public void actionPerformed(ActionEvent e) {
      labelResult.setText(textArea.getText());        // button عند النقر على الـ label و وضعه كنص للكائن textArea سيتم جلب النص الموجود في الكائن
      }
      });

      }

      }
    

ستظهر لك النافذة التالية عند التشغيل.

قم بإدخال أي نص في الـ Text Area ثم أنقر على الـ Button.

طريقة الحصول على النص الموجود بداخل ال JTextArea في جافا


Java Swing طريقة معرفة عدد الأسطر و الأحرف الموجودة في JTextArea

المثال التالي يعلمك طريقة الحصول على عدد الأسطر و الأحرف الموجودة في الـ Text Area.

المثال عبارة واجهة مستخدم فيها Text Area و إثنين Labels.
كلما تم إدخال أو حذف حرف في الـ Text Area سيتم إظهار عدد الأسطر في Label و عدد الأحرف في Label آخر.


مثال طريقة الحصول على عدد الأسطر و الأحرف الموجودة في الـ Text Area.

Main.java
      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 هنا وضعنا عدد أسطر الكائن
      }

      });

      }

      }
    

ستظهر لك النافذة التالية عند التشغيل.

عند إدخال أو حذف أي حرف في الـ Text Area سيتم تحديث قيمة العدادات الموضوعة بجانبه بشكل تلقائي.

حساب عدد الأحرف و الأسطر المدخلة في ال JTextArea في جافا