سؤال

أريد إضافة combobox إلى خلية Jtable.

model=new DefaultTableModel(data,col);
JTableHeader head=new JTableHeader();
head.setBackground(Color.BLUE);
table=new JTable(model);
table.add(head);
JComboBox combo = new JComboBox();
combo.addItem("Names");
combo.addItem("Antony");
combo.addItem("Victor");
combo.addItem("Ramkumar");
table.add(combo);

لكنني لا أستطيع الحصول على combobox في الخلية. هل من الممكن تعيين مربع التحرير والسرد؟

هل كانت مفيدة؟

المحلول

تحتاج إلى ضبط tablecelleditor من Jtable. من الأفضل البحث في دروس Java ، ولكن هنا شرح قصير.

يستخدم Jtable ثلاثة فصول رئيسية للعمل:

1) TableModel: الوظيفة هي تحديد عدد الصفوف والأعمدة التي يمتلكها الجدول وخدمة بيانات الجدول ، وهي الطرق الرئيسية هي GetValue (الصف ، Col) و SetValue (القيمة ، الصف ، Col). وأحداث النار لإعلام إعادة الطلاء Jtable.

2) TableCellRenderer: إنه غرض رئيسي هو رسم مكونات في خلايا JTable. هذه المكونات مرسومة فقط: لا تعمل! إذا قمت برسم jCombobox ، فلن desplegate إذا قمت بالنقر فوقه أو إذا قمت برسم jCheckbox ، فلن يتم تحديد/إلغاء تحديد.

3) TableCellEditor: من الغرض الرئيسي أن ترسم مكونًا داخل JTableCell لتحرير قيمة الخلية. يتلقى الأحداث ويقرر متى يتم بدء التحرير ، ثم يتم استدعاء طريقة getTableCellEditorComponent لإرجاع مكون المحرر. يتعين على المكون الذي تم إرجاعه تشغيل الأحداث بحيث يعرف TableCellEditor متى يوقف التحرير والحصول على القيمة واستخدامه للاتصال بـ tablemodel.setValue ... أو إلغاء التحرير.

بحيث لإظهار JCombobox في Jtable يجب عليك إنشاء TableCellEditor الخاص بك ، وليس مهمة سهلة إذا لم تكن قد فعلت ذلك من قبل.

نصائح أخرى

تفقد هذاتعليمي جافا والبحث في هذه الصفحة عن "استخدام مربع التحرير والسرد كمحرر"

جرب هذا: إنه يعمل من أجلي .. انقر على الخلية لرؤية Combobox.

 private void comboloader() {
        try {
            TableColumn gradeColumn = jTable1.getColumnModel().getColumn(0);
            JComboBox comboBox = new JComboBox();

            comboBox.removeAllItems();

            try {
                comboBox.addItem("Item 1");
                comboBox.addItem("Item 2");
                comboBox.addItem("Item 3");

            } catch (NullPointerException e) {
            } catch (Exception e) {
                e.printStackTrace();
            }
            gradeColumn.setCellEditor(new DefaultCellEditor(comboBox));
        } catch (Exception e) {
        }
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top