我有一个JTable,用户在单元格中输入数据。然后有一个“保存”按钮,用于收集表格数据,在csv中格式化,并将其保存到文件中。
但是,如果用户将最后一个单元格保留为选定状态,并单击“保存”按钮,则该单元格中的数据将被视为空,因此该单元格的数据不会保存到文件中。
由于用户很容易忘记取消选择一个单元格(为什么他们必须这样做?),我需要一种方法来以编程方式取消选择它。我尝试了表的clearSelection()方法,没有效果。
有什么建议吗?
提前感谢您的帮助。
John Doner
答案 0 :(得分:3)
有一篇很好的文章:http://tips4java.wordpress.com/2008/12/12/table-stop-editing/以及其他一些解决方法
快速摘要:
if (table.isEditing()) table.getCellEditor().stopCellEditing();
答案 1 :(得分:2)
您基本上希望以编程方式从正在编辑的单元格中删除焦点。您可以尝试以下方法:
table.editCellAt(-1, -1);
将正在编辑的单元格更改为不存在的(-1,-1)。因此,通过从按钮上的当前单元格中删除焦点,单击其数据将保持不变。我注意到单元格(0,0)被选中,如果发生这种情况,请在上面的行之后尝试以下行。
table.getSelectionModel().clearSelection();
这应该清除表格选择模型中的选择。希望这会有所帮助。
答案 2 :(得分:1)
您可以使用CellEditor
中的stopCellEditing函数 if(table.getCellEditor().stopCellEditing()){...}
如果成功,从TableModel获取选定的行。改变将在那里
答案 3 :(得分:1)
这对我有用:
if (jTable3.getCellEditor() != null) {
jTable3.getCellEditor().stopCellEditing();
}
它停止编辑jtable而不是取消编辑并保留最后编辑的值。
答案 4 :(得分:0)
我有一个类似的问题,并在创建表时修复了它:
table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
当然,只有当用户做了什么导致细胞失去焦点时才会起作用,这在我的情况下是正确的。