我有一个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组件的client属性:

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


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

10-02 01:54