在 Java Swing 中,我创建了一个JTable
使用扩展的表模型类DefaultTableModel
。由于表格的一行的值是布尔类型的,因此它们显示为复选框。由于我想将“项目侦听器”类添加到这些复选框中,因此我确实需要初始化这些复选框中的每一个。但是,如果这些是由表模型自动创建的,我该怎么办?
问问题
310 次
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 中,原因有两个:
- 在默认设置下,单个 JCheckbox 用于呈现所有复选框单元格。
- 鼠标点击包含 JCheckBox 的表格单元格不会传递到复选框,它们会被表格吸收。
我认为重要的是要问为什么需要这些事件?您给出的答案将反映采取的最佳方法。
如果您想允许用户编辑复选框的状态,您最好的方法可能是覆盖TableModel.isCellEditable(int, int)
以为 Checkbox 列返回 true,然后在更新 TableModel 时简单地更新原始数据。
于 2010-02-01T17:48:17.183 回答