以编程方式取消选择和编辑JTable单元格

时间:2011-03-22 00:36:45

标签: jtable edit

我有一个JTable,用户在单元格中输入数据。然后有一个“保存”按钮,用于收集表格数据,在csv中格​​式化,并将其保存到文件中。

但是,如果用户将最后一个单元格保留为选定状态,并单击“保存”按钮,则该单元格中的数据将被视为空,因此该单元格的数据不会保存到文件中。

由于用户很容易忘记取消选择一个单元格(为什么他们必须这样做?),我需要一种方法来以编程方式取消选择它。我尝试了表的clearSelection()方法,没有效果。

有什么建议吗?

提前感谢您的帮助。

John Doner

5 个答案:

答案 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获取选定的行。改变将在那里

stopCellEditing

答案 3 :(得分:1)

这对我有用:

if (jTable3.getCellEditor() != null) {
            jTable3.getCellEditor().stopCellEditing();
}

它停止编辑jtable而不是取消编辑并保留最后编辑的值。

答案 4 :(得分:0)

我有一个类似的问题,并在创建表时修复了它:

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

当然,只有当用户做了什么导致细胞失去焦点时才会起作用,这在我的情况下是正确的。