JTable 中的 JComboBox 不会在项目更改时立即更新 table
JComboBox in JTable does not update table instantly on item change
我有一个带有 JComboBoxes 的 JTable 作为其中一列的单元格编辑器。当用户单击其中一个组合框中的选项之一时,table 单元格应立即设置为从组合框中选择的任何选项。然而遗憾的是,直到用户单击其他地方或按 Enter 键后才会发生这种情况。
我知道我可以只从组合框中获取值,但我想在从 table 中的任何组合框中选择一个选项后立即将 table 保存到文件中,而且我还没有找到一种方法来动态识别组合框属于哪一行,以便 table 可以在项目更改时更新。
有没有办法让 table 在触发组合框项目侦听器后立即更新为所选值?
下面是一个演示此问题的示例:
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);
}
Is there a way to get the table to update with the chosen value as soon as the combobox item listener is fired?
不要依赖于 ItemListener(或 ActionListener)。这些事件只是表示组合框的选中项发生了变化。
现在编辑器将取得控制权并将其自身从 table 中删除,并使用所选值更新 TableModel
。
如果您想知道 TableModel
中的数据何时更改,请在 TableModel
中添加一个 TableModelListener
。
将生成一个TableModelEvent
,表示数据已更改。
有关简单示例,请参阅:JTable -> TableModeListener。
我有一个带有 JComboBoxes 的 JTable 作为其中一列的单元格编辑器。当用户单击其中一个组合框中的选项之一时,table 单元格应立即设置为从组合框中选择的任何选项。然而遗憾的是,直到用户单击其他地方或按 Enter 键后才会发生这种情况。
我知道我可以只从组合框中获取值,但我想在从 table 中的任何组合框中选择一个选项后立即将 table 保存到文件中,而且我还没有找到一种方法来动态识别组合框属于哪一行,以便 table 可以在项目更改时更新。
有没有办法让 table 在触发组合框项目侦听器后立即更新为所选值?
下面是一个演示此问题的示例:
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);
}
Is there a way to get the table to update with the chosen value as soon as the combobox item listener is fired?
不要依赖于 ItemListener(或 ActionListener)。这些事件只是表示组合框的选中项发生了变化。
现在编辑器将取得控制权并将其自身从 table 中删除,并使用所选值更新 TableModel
。
如果您想知道 TableModel
中的数据何时更改,请在 TableModel
中添加一个 TableModelListener
。
将生成一个TableModelEvent
,表示数据已更改。
有关简单示例,请参阅:JTable -> TableModeListener。