我需要一个CombobBox上的监听器,它是JTable上的cellEditor。 此侦听器必须为我提供新选择的值和行ID。
我的下面解决方案的问题是列表器链接到所有行,所以当我在一行中更改一个ComboBox值,然后移动到另一行(具有不同的组合值)时会引发一个事件,但所选的行尚未改变。我该怎样摆脱这种情况?
由于
column = jTableCheck.getColumnModel().getColumn(9);
JComboBox comboBox = new JComboBox(comboGenre);
comboBox.addItemListener(new ItemListener(){
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
int row = jTableCheck.getSelectedRow();
Popup.info(e.getItem() + " SELECTED, row="+row);
}
}
});
column.setCellEditor(new DefaultCellEditor(comboBox));
答案 0 :(得分:1)
不要在组合框上使用ItemListener。
相反,您应该使用TableModelListener
。只要TableModel中的数据发生更改,就会触发事件。因此,您将TableModelListener添加到JTable的TableModel。
TableModelEvent将为您更改的单元格的行/列。您可以从TableModel获取更改的值。
或许您可能希望使用类似于TableModelListener的Table Cell Listener,除了仅在实际更改值并且使用Action进行处理时调用代码。
答案 1 :(得分:0)
事实上,我已经在另一张桌子上使用了TableCellListener,但忘记了这一点!
我在这里找到了一个有用的课程:http://tips4java.wordpress.com/2009/06/07/table-cell-listener/