0

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

4

2 回答 2

2

TableModelListener由于这些 CheckBox 更改了基础数据,因此添加 a并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);
        }
    }
});
于 2010-02-01T16:53:09.503 回答
1

简短的回答是您不能将 ActionListeners 添加到表中的 JCheckboxes 中,原因有两个:

  1. 在默认设置下,单个 JCheckbox 用于呈现所有复选框单元格。
  2. 鼠标点击包含 JCheckBox 的表格单元格不会传递到复选框,它们会被表格吸收。

我认为重要的是要问为什么需要这些事件?您给出的答案将反映采取的最佳方法。

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

于 2010-02-01T17:48:17.183 回答