java - 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);
}
解决方案
一旦组合框项目侦听器被触发,有没有办法让表格更新为所选值?
不要依赖 ItemListener(或 ActionListener)。这些事件只是表明组合框的选定项已更改。
现在编辑器将控制并从表中删除自己并TableModel
使用选定的值更新。
如果您想知道 中的数据何时更改,请在 中添加TableModel
一个。TableModelListener
TableModel
TableModelEvent
将生成A指示数据已更改。
有关简单示例,请参阅:JTable -> TableModeListener。
推荐阅读
- amazon-ecs - 如何从 docker 映像中删除所有标签?
- python - Python3.9: AssertionError while making a test (Learn Python 3 the Hard Way ex49)
- windows - IIS URL 重写代理以分离内部服务器
- javascript - 将数据从 Web 表单发送到 whatsapp
- r - 如何从R中的行中调用数据
- opencart - 是否有生成 OCMOD 文件的工具?
- php - 邻近搜索具有多个位置的帖子
- python - Python opencv 无法从视频中裁剪帧
- node.js - 错误:ENOENT:没有这样的文件或目录 -Heroku
- oauth-2.0 - 如何将 OAuth2 流与 JWT 流集成