JTable中的JComboBox不会在项目更改时立即更新表

时间:2018-10-21 02:35:14

标签: java swing jtable jcombobox

我有一个带有JComboBoxes的JTable作为其中一列的单元格编辑器。当用户单击组合框之一中的选项之一时,表格单元格应立即设置为从组合框中选择的任何选项。但是,令人遗憾的是,直到用户单击其他位置或按Enter键,这种情况才会发生。

我了解我可以从组合框中获取值,但是一旦从表中的任何组合框中选择了一个选项,我都希望将表保存到文件中,而我一直无法找到动态标识组合框属于哪一行的表,以便可以在项目更改时更新表。

是否有一种方法可以在触发组合框项目侦听器后立即使表更新为所选值?

以下是演示此问题的示例:

public static void main(String args[]) {
    JFrame frame = new JFrame();
    frame.setSize(450, 250);

    JTable table = new JTable(2, 1);

    TableColumn testColumn = table.getColumnModel().getColumn(0);

    JComboBox<String> comboBox = new JComboBox<String>();
    comboBox.addItem("Item1");
    comboBox.addItem("Item2");
    comboBox.addItem("Item3");
    testColumn.setCellEditor(new DefaultCellEditor(comboBox));

    comboBox.addItemListener(new ItemListener(){
        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange() == ItemEvent.SELECTED){
                System.out.println(table.getValueAt(0, 0));
            }
        }
    });

    frame.add(table);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}

1 个答案:

答案 0 :(得分:1)

  

是否有一种方法可以在触发组合框项目侦听器后立即使表更新为所选值?

不依赖于ItemListener(或ActionListener)。这些事件只是表明组合框的所选项目已更改。

现在,编辑器将控制并从表中删除自身,并使用所选值更新TableModel

如果您想知道何时在TableModel中更改数据,请在TableModelListener上添加TableModel

将生成TableModelEvent,指示数据已更改。

请参见:JTable -> TableModeListener作为简单示例。