Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTable中的JComboBox不会在项目更改时立即更新表_Java_Swing_Jtable_Jcombobox - Fatal编程技术网

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

Java JTable中的JComboBox不会在项目更改时立即更新表,java,swing,jtable,jcombobox,Java,Swing,Jtable,Jcombobox,我有一个JTable,其中jcomboxes作为其中一列的单元编辑器。当用户单击其中一个组合框中的一个选项时,表格单元格应立即设置为从组合框中选择的任何选项。然而,遗憾的是,直到用户单击其他位置或按Enter键,这种情况才会发生 我知道我可以从combobox中获取值,但我想在从表中的任何combobox中选择选项后立即将表保存到文件中,而且我还无法找到动态标识combobox所属行的方法,以便在项目更改时更新表 是否有一种方法可以让表在触发combobox项侦听器后立即使用所选的值进行更新 下

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

我知道我可以从combobox中获取值,但我想在从表中的任何combobox中选择选项后立即将表保存到文件中,而且我还无法找到动态标识combobox所属行的方法,以便在项目更改时更新表

是否有一种方法可以让表在触发combobox项侦听器后立即使用所选的值进行更新

下面是一个演示此问题的示例:

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);
}
publicstaticvoidmain(字符串参数[]){
JFrame=新JFrame();
框架。设置尺寸(450250);
JTable表=新的JTable(2,1);
TableColumn testColumn=table.getColumnModel().getColumn(0);
JComboBox comboBox=新的JComboBox();
comboBox.addItem(“项目1”);
comboBox.addItem(“项目2”);
comboBox.addItem(“项目3”);
setCellEditor(新的DefaultCellEditor(组合框));
comboBox.addItemListener(新的ItemListener(){
@凌驾
公共无效itemStateChanged(ItemEvent e){
如果(如getStateChange()==ItemEvent.SELECTED){
System.out.println(table.getValueAt(0,0));
}
}
});
框架。添加(表);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
是否有一种方法可以让表在触发combobox项侦听器后立即使用所选的值进行更新

不要依赖ItemListener(或ActionListener)。这些事件仅表示组合框的选定项已更改

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

如果您想知道数据在
TableModel
中的更改时间,请将
tablemodelistener
添加到
TableModel

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

请参阅:了解一个简单的示例

是否有一种方法可以让表在触发combobox项侦听器后立即使用所选的值进行更新

不要依赖ItemListener(或ActionListener)。这些事件仅表示组合框的选定项已更改

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

如果您想知道数据在
TableModel
中的更改时间,请将
tablemodelistener
添加到
TableModel

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


请看:举个简单的例子。

我不完全理解你的意思。你想保存表格是什么意思?因此,您希望将单元格中的组合框替换为选项本身?整个表格将保存为以制表符分隔的文本文件,并且只要有组合框,所选选项将用于该单元格。是的,当表格保存时,单元格中的组合框将被所选选项替换。我不完全理解你的意思。你想保存表格是什么意思?因此,您希望将单元格中的组合框替换为选项本身?整个表格将保存为以制表符分隔的文本文件,并且只要有组合框,所选选项将用于该单元格。是的,当表格保存时,单元格中的组合框将被所选选项替换。谢谢!我将ItemListener改为TableModelListener,效果很好。谢谢!我将ItemListener更改为TableModelListener,效果很好。