在表模型生成JCheckBox时初始化它们

时间:2010-02-01 16:45:05

标签: java swing listener jcheckbox tablemodel

在Java Swing中,我创建了一个JTable,它使用了扩展DefaultTableModel的表模型类。由于表的一行的值是布尔类型,因此这些值显示为复选框。由于我想添加到这些复选框的项侦听器类,我需要初始化每个复选框。但是,如果这些是由表模型自动创建的,我该怎么办?

2 个答案:

答案 0 :(得分:2)

由于这些CheckBox更改了基础数据,因此添加TableModelListener并对该列的tableChanged事件作出反应就足够了。

jTable1.getModel().addTableModelListener(new TableModelListener() {
    final int YOUR_BOOLEAN_COLUMN = 1;
    public void tableChanged(TableModelEvent e) {
        if(e.getColumn() == YOUR_BOOLEAN_COLUMN) {
            // get value from model (not affected if user re-orders columns)
            TableModel tableModel = jTable1.getModel();
            Boolean value =
                (Boolean)tableModel.getValueAt(e.getFirstRow(), YOUR_BOOLEAN_COLUMN);
            System.out.println(value);
        }
    }
});

答案 1 :(得分:1)

简短的回答是,您无法将ActionListeners添加到表中的JCheckbox中,原因有两个:

  1. 使用默认设置,单个JCheckbox用于呈现所有复选框单元格。
  2. 鼠标点击包含JCheckBox的表格单元格不会传递给复选框,它们会被表格吸收。
  3. 我认为要问为什么你需要这些事件是很重要的?您给出的答案将反映出最佳方法。

    如果要允许用户编辑复选框的状态,最好的方法可能是覆盖TableModel.isCellEditable(int, int)以对Checkbox列返回true,然后在TableModel更新时简单地更新原始数据。 / p>