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 يمثل جدول له عدد محدد من الأعمدة و الأسطر.
|
|
public JTable(Object[][] rowData, Object[] columnNames)
ينشئ كائن من الكلاس JTable يمثل جدول مجهز بأسماء الجدوال و البيانات.
|
|
public JTable(TableModel model)
ينشئ كائن من الكلاس JTable يمثل جدول مجهز بأسماء الجدوال و البيانات.مكان الباراميتر model نضع كائن من إحدى الكلاسات التي تنفذ الإنترفيس TableModel و الذي بدوره يحتوي على جميع المعلومات التي ستظهر في الجدول. |
|
public JTable(Vector rowData, Vector columnNames)
ينشئ كائن من الكلاس JTable يمثل جدول مجهز بأسماء الجدوال و البيانات.
|
دوال الكلاس JTable
الجدول التالي يحتوي على بعض دوال الكلاس JTable
.
الدالة مع تعريفها | |
---|---|
public Object getValue(int row, int column)
ترجع قيمة موجودة في كائن الـ JTable الذي قام بإستدعائها ككائن نوعه Object .
|
|
public void SetValue(Object newValue, int row, int column)
تضع قيمة جديدة مكان قيمة كانت أصلاً موجودة في كائن الـ JTable الذي قام بإستدعائها.
|
|
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 الذي قام بإستدعائها.
|
|
public void setModel(TabelModel model)
تستخدم لتحديد Model كائن الـ JTable الذي قام بإستدعائها.مكان الباراميتر model نضع كائن من إحدى الكلاسات التي تنفذ الإنترفيس TabelModel .ترمي الإستثناء IllegalArgumentException في حال كان كائن الـ dataModel فارغاً, أي قيمته تساوي null . |
|
public TabelModel getModel()
ترجع نسخة من كائن الـ TableModel الذي يستخدمه كائن الـ JTable الذي قام بإستدعائها. |
أمثلة شاملة على الكلاس JTable
طريقة إنشاء جدول JTable
و إضافة بيانات فيه
المثال التالي يعلمك طريقة إنشاء جدول و إعطائه قيم مباشرةً عند الإنشاء ثم ضافته في النافذة.
مثال طريقة إنشاء جدول و إعطائه قيم مباشرةً عند الإنشاء ثم ضافته في النافذة.
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
المثال التالي يعلمك طريقة جعل المستخدم يدخل البيانات في الجدول, بالإضافة إلى جعله قادر على حذف البيانات التي أدخلها.
مثال يشرح طريقة جعل المستخدم يدخل البيانات في الجدول, بالإضافة إلى جعله قادر على حذف البيانات التي أدخلها.
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 لإلغائهم.
كورس Java Swing من الصفر
أفضل كورس لتعلم Java swing من الصفر الى النهاية .