在 JXTable 中更改当前选择不起作用?



我有一个JXTable,用户需要在其中引入数据,然后保存它。唯一的问题是,用户必须在保存之前取消选择上次编辑的单元格。如果不这样做,则不会保存该单元格的数据。

我唯一想到的是在保存之前自动更改当前选择。这是我尝试过的:

table.getSelectionModel().setSelectionInterval(0, 0);
table.getColumnModel().getSelectionModel().setSelectionInterval(0, 0);

table.getSelectionModel().setLeadSelectionIndex(0);
table.getColumnModel().getSelectionModel().setLeadSelectionIndex(0);

两者似乎都不起作用,但这是我发现的唯一两种方法。

任何人都可以告诉我如何正确执行此操作或提出替代方案以使其保存最后一个单元格中的数据?

我假设用户在希望保存数据时单击另一个组件(JButton)。如果在事件发生时引用JXTable,则可以在其中添加以下代码段:

if (table.isEditing()) {
    table.getCellEditor().stopCellEditing();
}

stopCellEditing()应保存模型的状态,并允许您保存所有内容,包括当前选择/编辑的单元格。


编辑:正如kleopatra指出的那样,处理此问题的默认(更好!)方法是通过JTable组件的客户端属性:

table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);

对于JXTable,这应该已经设置好了,这表明保存功能的 UI 处理方式不包括将焦点移离表。因此,从本质上讲,您最好在触发"保存"事件时更改焦点。

最新更新