【发布时间】:2010-02-01 16:45:05
【问题描述】:
在 Java Swing 中,我创建了一个 JTable,它使用了一个扩展 DefaultTableModel 的表模型类。由于表格的一行的值是布尔类型的,因此它们显示为复选框。由于我想将“项目侦听器”类添加到这些复选框中,因此我确实需要初始化这些复选框中的每一个。但是如果这些是由表模型自动创建的,我该怎么办?
【问题讨论】:
标签: java swing listener jcheckbox tablemodel
在 Java Swing 中,我创建了一个 JTable,它使用了一个扩展 DefaultTableModel 的表模型类。由于表格的一行的值是布尔类型的,因此它们显示为复选框。由于我想将“项目侦听器”类添加到这些复选框中,因此我确实需要初始化这些复选框中的每一个。但是如果这些是由表模型自动创建的,我该怎么办?
【问题讨论】:
标签: java swing listener jcheckbox tablemodel
由于这些 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);
}
}
});
【讨论】:
简短的回答是您不能将 ActionListeners 添加到表中的 JCheckboxes 中,原因有两个:
我认为问为什么你需要这些活动很重要?您给出的答案将反映最佳方法。
如果您希望允许用户编辑复选框的状态,您最好的方法可能是覆盖 TableModel.isCellEditable(int, int) 以对 Checkbox 列返回 true,然后在 TableModel 更新时简单地更新原始数据。
【讨论】: