سؤال

مقدمة: أنا مروع مع جافا ، والأسوأ من ذلك مع مكونات Java UI.

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

حاليا لدي cellrenderer مخصص:

public class GraphButtonCellRenderer extends JCheckBox implements TableCellRenderer {
public GraphButtonCellRenderer() {
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    if(isSelected)
        setSelected(true);
    else
        setSelected(false);
    setMargin(new Insets(0, 16, 0, 0));
    setIconTextGap(0);

    setBackground(new Color(255,255,255,0));
    return this;
}}

الذي يتولى حاليًا رسم مربع القراد ، ولكن فقط القراد ويفكك المربع إذا تم تحديد هذا الصف. لكني لا أعرف كيف أتعامل مع الأحداث. حقًا ما أطلبه هو رابط إلى برنامج تعليمي جيد حول كيفية إضافة مربعات الاختيار بشكل نظيف إلى JTable. أي مساعدة موضع تقدير كبير :)

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

المحلول

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

public Class getColumnClass(int column)

إذا كنت تريد أن يكون العمود قابلاً للتحرير ، فاحرص على ذلك

public boolean isCellEditable(int row, int column)

Jtable يعتني بالعرض لك.

مثال آخر هنا.

نصائح أخرى

كما يقول بيتر ، من السهل استخدام فئة DefaultTableModel الموسعة ، على سبيل المثال:

class NewTableModel extends DefaultTableModel{
        public Class<?> getColumnClass(int columnIndex) {
            return getValueAt(0, columnIndex).getClass();
        }
    }

ها هو بسيط بدلاً من ذلك مثال باستخدام TableCellRenderer و TableCellEditor. أنظر أيضا، المفاهيم: المحررين والعارضين.

إضافة: @Jay Askren's Point تم أخذها جيدًا. العارض الافتراضي ل Boolean.class, ، كما هو موضح في البرنامج التعليمي ، قد يكون كل ما تحتاجه.

الحل الأسهل هو استخدام DefaultTableModel واستخدام الكائن المنطقي كقيم.

في نوع عمود مجموعة Swing Designer إلى Boolean

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top