السلام عليكم
كنت أريد أن أقوم بإضافة عمود في jTable يكون بة checkbox
مثل الصورة المرفقة
فأرجو من زوي الخبرات الإفادة ولكم مني كل الإحترام والتقدير
عندما تحدد صنف عمود في Boolean، فإنه يتم تلقائيا رسمه عى شكل JCheckBox
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class TableCheckBox {
public static void main(String[] args) {
//############################################
DefaultTableModel model = new DefaultTableModel(new String[]{"Name", "Married"}, 0) {
@Override
public Class<?> getColumnClass(int columnIndex) {
if (columnIndex == 1) { //If it is the second column
return Boolean.class;
} else {
return Object.class;
}
}
};
model.addRow(new Object[]{"zozo", true});
model.addRow(new Object[]{"zizi", false});
JTable table = new JTable(model);
//############################################
JFrame frm = new JFrame();
frm.add(new JScrollPane(table));
frm.setSize(400, 400);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
}
}herch كتب:عندما تحدد صنف عمود في Boolean، فإنه يتم تلقائيا رسمه عى شكل JCheckBox
import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class TableCheckBox { public static void main(String[] args) { //############################################ DefaultTableModel model = new DefaultTableModel(new String[]{"Name", "Married"}, 0) { @Override public Class<?> getColumnClass(int columnIndex) { if (columnIndex == 1) { //If it is the second column return Boolean.class; } else { return Object.class; } } }; model.addRow(new Object[]{"zozo", true}); model.addRow(new Object[]{"zizi", false}); JTable table = new JTable(model); //############################################ JFrame frm = new JFrame(); frm.add(new JScrollPane(table)); frm.setSize(400, 400); frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frm.setVisible(true); } }
شكراً لك أخي الكريم علي سرعة الإستجابة والرد
لقد قمت بفعل ذلك من قبل لكن يظهر لي كلمتي TRUE & FALSE لكن لا يظهر لي Checkbox
فأرجو منك شرح الكود المسؤل عن عرض checkbox وليس القيم النصية كما هي
hossamnew كتب:لقد قمت بفعل ذلك من قبل لكن يظهر لي كلمتي TRUE & FALSE لكن لا يظهر لي Checkbox
الصورة الموجودة في الرد هي نتيجة تشغيل الكود، لذلك فالكود يعمل المطلوب منه.
ضع الكود الذي كتبته.
--------------------
يجب أن تنشئ DefaultTableModel جديد واعمل override للطريقة getColumnClass بحيث تعيد Boolean.class بالنسبة للعمود الذي تريد رسم checkbox فيه.
ولا تنس تمرير ال model الذي أنشأت إلى الجدول JTable
.
تم تعديل هذه المشاركة بواسطة herch في 15 فبراير 2010 في 18:18
يتكون كل عمود من JTable من عنصرين هما : Renderer للعرض و Editor لأدخال البيانات , ال Editor يمكنه ان يأخذ عدة اشكال التى من ضمنها JCheckBox و الذى يقوم بأعادة Boolean
الاوبجكت و ليس ال primitive , و كذلك ال Renderer يمكنك عرضه بالشكل المطلوب
اولا : ال Editor
قم بعمل Object من JChectBox و قم بوضع جميع الخصائص التي تريدها ان تظهر عند عملية ال Editing مثل ال HorizontalAlignment ال Background
ثم مرر هذا ال CheckBox الى DefaultCellEditor كالتالي :
DefaultCellEditor dct = new DefaultCellEditor(YorCheckBox);
و لوضع هذا ال Editor للعمود المطلوب ( هنا تم وضع الEditor للعمود الاول )
table.getColumnModel().getColumn(0).setCellEditor(dtc);
وبهذا تم عمل ال Editor المطلوب و في حالة قام المستخدم بوضع علامة صح فبذلك يعيد الاوبجكت Boolean و في هذه الحالة الاوبجكت Boolean بالقيمة true و العكس صحيح
ثانيا ال Renderer
قم بعمل class ترس من JCheckBox و تقوم بعمل implements لل TableCellRenderer
و قم بوضع الخصائص المرادة فيه
TableCellRenderer هيا Interface تحتوي على method واحدة لأعادة ال Component الخاص بالعرض و هي public Component getTableCellRendererComponent
قم بعمل override لها بحيث تعرض صح JCheckBox ذو علامة صح في حالة القيمة true القادمة من الBoolean الممرر من ال Editor و العكس
كود الكلاس:
class CheckSameh extends JCheckBox implements TableCellRenderer
{
public CheckSameh()
{
setBackground(Color.WHITE);
setHorizontalAlignment(CENTER);
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected
, boolean hasFocus, int row, int column) {
setSelected(((Boolean)value).booleanValue());
return this;
}
}هنا تم عمل cast لل Object الذي تم تمريره من ال Editor ال ل Boolean و تم تحديد علامة ال JCheckBox من خلال ال method getBoolaenValue الموجودة في الكلاس Boolean ثم اعدنا
ال CheckBox
بعد ذلك ممر هذا ال Renderer لل العمود المطلوب (العمود الاول )
table.getColumnModel().getColumn(0).setCellRenderer(new CheckSameh());
تم تعديل هذه المشاركة بواسطة sameh mahmoud في 15 فبراير 2010 في 22:07
سبـــــحــــان الله و بحمده سبحان الله العظيم

شكرأ جزيلاً لكم أخوتي علي الإفادة لقد عملت الأكواد بشكل سليم
لكني عند عمل إختبار هل هناك علامة علي الصف أم لا بهذا الكود
if (dtm.getValueAt(i, 0) == Boolean.TRUE)
يحدث خطأ في الـ Loop ولا تكمل
وشكراً لكم مرة أخري
Boolean b = (Boolean)dtm.getValueAt(x , 0);
boolean b2 = b.getBooleanValue();
if(b2)
{
}
جرب و قوليسبـــــحــــان الله و بحمده سبحان الله العظيم
