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