我有一个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处理方式不包括将焦点从表中移开。因此,从本质上讲,最好在触发“保存”事件时更改焦点。