在组合框单元编辑器上的getSelectedRow

时间:2014-03-20 16:05:24

标签: java swing jtable itemlistener

我需要一个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));

2 个答案:

答案 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/