كورس Java swing من الصفر - الكلاس JTable

Java Swing الكلاس JTable

الكلاس JTable يستخدم لإضافة جدول (Table) في واجهة المستخدم.


بنا الكلاس JTable

public class JTable
extends JComponent
implements TableModelListener, Scrollable, TableColumnModelListener, ListSelectionListener, CellEditorListener, Accessible, RowSorterListener 
	

طريقة التعامل مع الكلاس JTable

عند التعامل مع الـ Table فأنت لا تضع فيه القيم مباشرةً. بل تضع القيم في الـ Model الخاصة به.
إذاً سيكون عليك إنشاء كائن من إحدى الكلاسات التي تنفذ الإنترفيس TableModel و وضعه كـ Model لكائن الـ JTable.
بعدها يمكنك إنشاء مصفوفتين, الأولى تكون ذات بعد واحد تضع فيها أسماء أعمدة الجدول. و الثانية تكون ذات بعدين تضع فيها قيم الجدول.
في الأخير تضع كلا المصفوفتين في الـ Model و عندها ستظهر عناصرهما مباشرةً في الجدول.

و يمكنك وضع الـ Table بداخل JScrollPane لجعلها تظهر Scroll Bar عند الحاجة.

لا تقلق ستفهم كل شيء من الأمثلة.


مصطلحات الكلاس jtable

المصطلح معناه
Table تعني جدول. و هو يتألف من أعمدة و أسطر.
Row عبارة عن سطر في الجدول.
Column عبارة عن عامود في الجدول.
Cell عبارة عن خلية في الجدول. و هي عبارة عن كائن موجود في سطر و عمود محدد في الجدول.
كل خلية تمثل قيمة في الجدول.

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

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

الكونستركتور مع تعريفه
public JTable() ينشئ كائن من الكلاس JTable يمثل جدول فارغ.
public JTable(int numRows, int numColumns) ينشئ كائن من الكلاس JTable يمثل جدول له عدد محدد من الأعمدة و الأسطر.

  • مكان الباراميتر numRows نضع رقم يمثل عدد الأسطر التي ستظهر في الجدول.

  • مكان الباراميتر numColumns نضع رقم يمثل عدد الأعمدة التي ستظهر في الجدول.

public JTable(Object[][] rowData, Object[] columnNames) ينشئ كائن من الكلاس JTable يمثل جدول مجهز بأسماء الجدوال و البيانات.

  • مكان الباراميتر rowData نضع مصفوفة ذات بعدين تحتوي على البيانات التي ستظهر في الجدول.

  • مكان الباراميتر columnNames نضع مصفوفة ذات بعد واحد تحتوي على أسماء الجداول التي ستظهر في الجدول.

public JTable(TableModel model) ينشئ كائن من الكلاس JTable يمثل جدول مجهز بأسماء الجدوال و البيانات.
مكان الباراميتر model نضع كائن من إحدى الكلاسات التي تنفذ الإنترفيس TableModel و الذي بدوره يحتوي على جميع المعلومات التي ستظهر في الجدول.
public JTable(Vector rowData, Vector columnNames) ينشئ كائن من الكلاس JTable يمثل جدول مجهز بأسماء الجدوال و البيانات.

  • مكان الباراميتر rowData نضع كائن من الكلاس Vector يحتوي على البيانات التي ستظهر في الجدول.

  • مكان الباراميتر columnNames نضع كائن من الكلاس Vector يحتوي على أسماء الجداول التي ستظهر في الجدول.

دوال الكلاس JTable

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

الدالة مع تعريفها
public Object getValue(int row, int column) ترجع قيمة موجودة في كائن الـ JTable الذي قام بإستدعائها ككائن نوعه Object.

  • مكان الباراميتر row نضع Index السطر الذي يحتوي على القيمة.

  • مكان الباراميتر column نضع Index العامود الذي يحتوي على القيمة.

public void SetValue(Object newValue, int row, int column) تضع قيمة جديدة مكان قيمة كانت أصلاً موجودة في كائن الـ JTable الذي قام بإستدعائها.

  • مكان الباراميتر newValue نضع القيمة الجديدة.

  • مكان الباراميتر row نضع Index السطر الذي يحتوي على القيمة.

  • مكان الباراميتر column نضع Index العامود الذي يحتوي على القيمة.

public int getRowCount() ترجع عدد الأسطر الموجودة في كائن الـ JTable الذي قام بإستدعائها.
public int getColumnCount() ترجع عدد الأعمدة الموجودة في كائن الـ JTable الذي قام بإستدعائها.
public int getSelectedColumn() ترجع رقم يمثل Index أول عامود قام المستخدم بتحديده في كائن الـ JTable الذي قام بإستدعائها.
و ترجع 1- في حال لم يتم تحديد أي عامود.
public int[] getSelectedColumns() ترجع مصفوفة من الأرقام تمثل أرقام الـ Indices لجميع الأعمدة التي قام المستخدم بتحديدها في كائن الـ JTable الذي قام بإستدعائها.
و ترجع مصفوفة فارغة, أي 0 في حال لم يتم تحديد أي عامود.
public int getSelectedRow() ترجع رقم يمثل Index أول سطر قام المستخدم بتحديده في كائن الـ JTable الذي قام بإستدعائها.
و ترجع 1- في حال لم يتم تحديد أي سطر.
public int[] getSelectedRows() ترجع مصفوفة من الأرقام تمثل أرقام الـ Indices لجميع الأسطر التي قام المستخدم بتحديدها في كائن الـ JTable الذي قام بإستدعائها.
و ترجع مصفوفة فارغة, أي 0 في حال لم يتم تحديد أي سطر.
public boolean isCellSelected(int row, int column) ترجع true إذا كان رقم السطر و العامود اللذين تم تمريرهما كـ Arguments للدالة يشيران إلى Cell قد تم تحديدها في كائن الـ JTable الذي قام بإستدعائها.

  • مكان الباراميتر row نضع Index السطر الذي يشير على الـ Cell.

  • مكان الباراميتر column نضع Index العامود الذي يشير للـ Cell.

public void setModel(TabelModel model) تستخدم لتحديد Model كائن الـ JTable الذي قام بإستدعائها.
مكان الباراميتر model نضع كائن من إحدى الكلاسات التي تنفذ الإنترفيس TabelModel.

ترمي الإستثناء IllegalArgumentException في حال كان كائن الـ dataModel فارغاً, أي قيمته تساوي null.
public TabelModel getModel() ترجع نسخة من كائن الـ TableModel الذي يستخدمه كائن الـ JTable الذي قام بإستدعائها.

أمثلة شاملة على الكلاس JTable

طريقة إنشاء جدول JTable و إضافة بيانات فيه

المثال التالي يعلمك طريقة إنشاء جدول و إعطائه قيم مباشرةً عند الإنشاء ثم ضافته في النافذة.


مثال طريقة إنشاء جدول و إعطائه قيم مباشرةً عند الإنشاء ثم ضافته في النافذة.

Main.java
                    import javax.swing.JFrame;
                    import javax.swing.JTable;
                    import javax.swing.JScrollPane;
                    import javax.swing.table.DefaultTableModel;

                    public class Main {

                    public static void main(String[] args) {

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

                    String columns[] = {"ID", "First Name", "Last Name"};     // هنا قمنا بتعريف مصفوفة و التي سنستخدمها كأسماء للجدول
                    String data[][] = {                                       // هنا قمنا بتعريف مصفوفة و التي سنستخدمها كبيانات في الجدول
                    {"1", "Mhamad", "Harmush" },
                    {"2", "Ahmad", "Mousally" },
                    {"3", "Hala", "Hassan" },
                    {"4", "Rim", "Al Mouhandes" },
                    {"5", "Said", "Al Kurdy" },
                    {"6", "Abdullah", "Saadi" },
                    {"7", "Ibrahim", "Marhaba" },
                    {"8", "Omar", "El Koussa" },
                    {"9", "Riad", "Asaad" },
                    {"10", "Rawan", "Hoblos" }
                    };

                    DefaultTableModel model = new DefaultTableModel();       // Model أي كأننا قمنا بتعريف .DefaultTableModel هنا قمنا بإنشاء كائن من الكلاس
                    model.setDataVector(data, columns);                      // Model هنا قمنا بوضع المصفوفات بداخل الـ
                    JTable table = new JTable(model);                        // model هنا قمنا بتعريف جدول مبني على البيانات الموجودة في الـ
                    JScrollPane tableScroller= new JScrollPane(table);       // عند الحاجة Scroll Bar لضمان ظهور JScrollPane بداخل كائن من الكلاس table هنا وضعنا الـ

                    tableScroller.setBounds(60, 40, 370, 140);               // frame في الـ tableScroller هنا قمنا بتحديد حجم و موقع الـ

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

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

                    }

                    }
                  

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

طريقة تعريف جدول في جافا JTable و إضافة بيانات فيه

 طريقة إضافة و حذف بيانات من الـ JTable

المثال التالي يعلمك طريقة جعل المستخدم يدخل البيانات في الجدول, بالإضافة إلى جعله قادر على حذف البيانات التي أدخلها.


مثال يشرح طريقة جعل المستخدم يدخل البيانات في الجدول, بالإضافة إلى جعله قادر على حذف البيانات التي أدخلها.

Main.java
                    import java.awt.event.ActionEvent;
                    import java.awt.event.ActionListener;
                    import javax.swing.JFrame;
                    import javax.swing.JLabel;
                    import javax.swing.JTextField;
                    import javax.swing.JButton;
                    import javax.swing.JTable;
                    import javax.swing.table.DefaultTableModel;
                    import javax.swing.JScrollPane;

                    public class Main {

                    // هنا قمنا بإنشاء النافذة و جميع الأشياء التي سنضعها فيها
                    static JFrame frame = new JFrame("JTable demo");
                    static JLabel label_1 = new JLabel("ID");
                    static JLabel label_2 = new JLabel("Name");
                    static JLabel label_3 = new JLabel("Phone");
                    static JTextField textField_1 = new JTextField();
                    static JTextField textField_2 = new JTextField();
                    static JTextField textField_3 = new JTextField();
                    static JButton btn_add = new JButton("Add");
                    static JButton btn_clear = new JButton("Clear");
                    static JButton btn_delete = new JButton("Delete Selected");
                    static JButton btn_deleteAll = new JButton("Delete All");
                    static DefaultTableModel model = new DefaultTableModel();
                    static JTable table = new JTable( model );
                    static JScrollPane tableScroller = new JScrollPane( table );


                    public static void main(String[] args) {

                    // هنا قمنا بوضع أسماء الأعمدة التي ستظهر في الجدول
                    model.addColumn("ID");
                    model.addColumn("Name");
                    model.addColumn("Phone");

                    // frame هنا قمنا بتحديد أماكن الأشياء التي سنضيفها في الـ
                    label_1.setBounds(40, 50, 50, 20);
                    label_2.setBounds(40, 90, 50, 20);
                    label_3.setBounds(40, 130, 50, 20);
                    textField_1.setBounds(100, 50, 120, 20);
                    textField_2.setBounds(100, 90, 120, 20);
                    textField_3.setBounds(100, 130, 120, 20);
                    btn_add.setBounds(150, 180, 70, 30);
                    btn_clear.setBounds(70, 180, 70, 30);
                    btn_delete.setBounds(315, 250, 140, 30);
                    btn_deleteAll.setBounds(470, 250, 140, 30);
                    tableScroller.setBounds(280, 50, 370, 160);

                    // frame هنا قمنا بإضافة جميع الأشياء التي قمنا بتعريفها سابقاً في الـ
                    frame.add(label_1);
                    frame.add(label_2);
                    frame.add(label_3);
                    frame.add(textField_1);
                    frame.add(textField_2);
                    frame.add(textField_3);
                    frame.add(btn_add);
                    frame.add(btn_clear);
                    frame.add(btn_delete);
                    frame.add(btn_deleteAll);
                    frame.add(tableScroller);

                    // frame هنا قمنا بتحديد خصائص الـ
                    frame.setSize(710, 350);
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setLayout(null);
                    frame.setVisible(true);


                    // btn_add هنا نضع الأوامر التي نريد تنفيذها عند النقر على الـ
                    btn_add.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e)
                    {
                    // إذا قام المستخدم بإدخال بيانات في مربعات النصوص الثلاثة
                    if( !textField_1.getText().equals("") && !textField_2.getText().equals("") && !textField_3.getText().equals("") )
                    {
                    // عندها سيتم تخزينهم في متغيرات بشكل مؤقت
                    String id = textField_1.getText();
                    String name = textField_2.getText();
                    String phone = textField_3.getText();

                    // الخاصة بالجدول model بعدها سيتم تخزينهم في مصفوفة واحدة, ثم إضافتها في الـ
                    String[] userInfo = { id, name, phone };
                    model.addRow( userInfo );
                    }
                    }
                    });


                    // btn_clear هنا نضع الأوامر التي نريد تنفيذها عند النقر على الـ
                    btn_clear.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e)
                    {
                    // سيتم مسح النصوص المدخلة في مربعات النصوص الثلاثة
                    textField_1.setText("");
                    textField_2.setText("");
                    textField_3.setText("");
                    }
                    });


                    // btn_delete هنا نضع الأوامر التي نريد تنفيذها عند النقر على الـ
                    btn_delete.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                    // إذا كان المستخدم قد قام بتحديد سطر واحد على الأقل من الجدول
                    if( table.getSelectedRowCount() > 0 )
                    {
                    // الخاص فيه index كل سطر قام المستخدم بتحديده من الجدول بعدها سيتم حذف كل سطر من خلال رقم الـ index سيتم تخزين رقم
                    int[] selectedIndices = table.getSelectedRows();
                    for( int i=selectedIndices.length-1; i>=0; i-- )
                    {
                    model.removeRow( selectedIndices[i] );
                    }
                    }
                    }
                    });


                    // btn_deleteAll هنا نضع الأوامر التي نريد تنفيذها عند النقر على الـ
                    btn_deleteAll.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e)
                    {
                    // يساوي 0. أي سيتم مسح جميع العناصر الموجودة فيها model هنا سيتم جعل عدد أسطر الـ
                    model.setRowCount(0);
                    }
                    });


                    }

                    }
                  

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

ملاحظة لإلغاء أكثر من سطر في نفس الوقت, أبق إصبعك على الزر Ctrl أثناء تحديد الأسطر, بعدها أنقر على الزر Delete Selected لإلغائهم.

طريقة جعل المستخدم يدخل البيانات في الجدول Jtable بالإضافة إلى جعله قادر على حذف البيانات التي أدخلها في جافا

كورس   Java Swing من الصفر

أفضل كورس لتعلم Java swing من الصفر الى النهاية  .