1

我遇到以下问题:我有一个 JTable,它的 on tablemodel 位于 JFrame 上。tablemodel 使用自己的 hashmap 备份以存储内容。该表有两列,其中右侧是可编辑的。

通常,用户更改右侧的一些值,然后按下回车按钮,该按钮触发调用我的保存函数的 tabledatachanged 事件。然后可以关闭框架。

但是,有些用户只是简单地编辑单元格,然后他们关闭窗口而不按 Enter,所以我没有机会保存表格。我知道如何在框架即将关闭时编写事件,但我不知道如何在完成编辑的同时检索“未完成”编辑的内容。

我想这与单元编辑器有关,我什至尝试使用应该返回活动的 table.getCellEditor() 但它返回 null。

谢谢您的帮助!

4

1 回答 1

6

最简单的措施是配置表格以在失去焦点时尽最大努力:

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

不幸的是,在某些情况下,它的最大努力不够好(当用户单击框架的关闭按钮时)。在那些情况下,除了钩入可能会丢失编辑的每条车道并手动强制停止编辑外,别无他法

if (table.isEditing()) {
    boolean stopped = table.getCellEditor().stopCellEditing();
    if (!stopped) {
        // here goes error handling and/or cancelling the edit
    }
}

根据您对问题的描述,

一些用户只是简单地编辑单元格,然后他们关闭窗口而不按 Enter

我对第一个工作正常感到有些惊讶本来预计您需要在 WindowListener 中执行第二个。

另请参阅 Rob 的博客条目

于 2012-10-15T14:15:31.907 回答