我有一个JTable的自定义TableCellRenderer
(ValueRenderer),单元格是Checkbox
。
我已将ItemListener
附加到valueRenderer以收听此example所述的复选框状态更改(已选中/已取消选择)。
我的问题是在itemStateChanged(ItemEvent e)
内部,我不知道如何获取包含此复选框的行,因为ItemEvent
来源是ValueRenderer。
你能帮助我吗?
以下是我的一些代码:
自定义TableCellRender:
public class ValueRenderer extends JCheckBox implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {
this.setSelected((Boolean) value);
return this;
}
}
的ItemListener:
public class TableRowCheckBoxListener implements ItemListener {
private JTable hqlRequestTable;
public TableRowCheckBoxListener(JTable hqlRequestTable) {
this.hqlRequestTable = hqlRequestTable;
}
@Override
public void itemStateChanged(ItemEvent e) {
/*How do I get the row which contains the checkbox clicked knowing that :
e.getSource() == ValueRenderer
e.getItem() == ValueRender
*/
}
}
答案 0 :(得分:2)
如果您想知道表中某些值何时发生更改,则不得在渲染器上注册侦听器。您必须在表模型上注册一个监听器:表中显示数据的位置,以及在数据发生任何变化时触发事件的对象。
另一种方法是使用包含在bean列表中的自定义表模型,让表模型修改它所拥有的bean的属性,并在属性更改时让bean触发属性更改事件。然后,您将在bean本身上注册侦听器,而不是注册表模型侦听器(请注意,表模型仍然必须触发表模型事件)。