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

发布于 2024-10-24 21:58:46 字数 293 浏览 5 评论 0原文

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

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

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

有什么建议吗?

预先感谢您的任何帮助。

约翰·多纳

I have a JTable in which a user enters data in the cells. Then there is a "Save" button which collects the table data, formats it in csv, and saves it to a file.

However, if a user leaves the last cell edited in a selected state, and clicks the Save button, the data in that cell is taken as null, so the data for that cell is not saved to the file.

Since it is easy for a user to forget to deselect a cell (and why should they have to?), I need a method to programmatically deselect it. I tried the clearSelection() method for the table, to no effect.

Any suggestions?

Thanks in advance for any help.

John Doner

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

送君千里 2024-10-31 21:58:46

您基本上希望以编程方式从正在编辑的单元格中删除焦点。您可以尝试以下操作:

        table.editCellAt(-1, -1);

将正在编辑的单元格更改为不存在的 (-1, -1)。因此,通过在按钮单击时从当前单元格中移除焦点,其数据将被保留。我注意到单元格 (0, 0) 被选中,如果发生这种情况,请尝试上一行之后的下一行。

        table.getSelectionModel().clearSelection();

这应该会清除表选择模型中的选择。希望这有帮助。

You basically want to programmatically remove the focus from the cell being edited. You can try the following:

        table.editCellAt(-1, -1);

That changes the cell being edited to (-1, -1) which does not exist. So by removing the focus from the current cell on button click its data gets persisted. I've noticed that cell (0, 0) gets selected, if this happens try the following line after the above line.

        table.getSelectionModel().clearSelection();

That should clear the selection from the table's selection model. Hope this helps.

梦途 2024-10-31 21:58:46

有一篇关于此的好文章:http://tips4java.wordpress。 com/2008/12/12/table-stop-editing/ 以及其他一些解决方法

快速摘要:
if (table.isEditing()) table.getCellEditor().stopCellEditing();

There is a nice article about this: http://tips4java.wordpress.com/2008/12/12/table-stop-editing/ with some other way to work around

Quick summary:
if (table.isEditing()) table.getCellEditor().stopCellEditing();

吃不饱 2024-10-31 21:58:46

您可以使用 CellEditor 中的 stopCellEditing 函数

if(table.getCellEditor().stopCellEditing()){...}
如果成功,则从 TableModel 中获取所选行。更改将在那里

停止单元格编辑

You can use the stopCellEditing function from the CellEditor

if(table.getCellEditor().stopCellEditing()){...}
if it succeeds, get the selected row from the TableModel. The change will be in there

stopCellEditing

我恋#小黄人 2024-10-31 21:58:46

这对我有用:

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

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

This worked for me :

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

It stops editing of the jtable rather than cancelling the editing and retains the last editted value.

独守阴晴ぅ圆缺 2024-10-31 21:58:46

我遇到了类似的问题,并在创建表时修复了它:

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

当然,只有当用户所做的任何事情导致单元格失去焦点时才有效,这在我的情况下是正确的。

I had a similar problem and this fixed it, at table creation time:

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

Of course, this works only if whatever the user does causes the cell to lose focus, which was true in my case.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文