【问题标题】:save JTable's contents when closing its JFrame with unfinished editing关闭未完成编辑的 JFrame 时保存 JTable 的内容
【发布时间】:2012-10-15 13:29:52
【问题描述】:

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

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

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

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

感谢您的帮助!

【问题讨论】:

  • 我迷路了,请问什么,在哪里,怎么做???
  • 问题是 CellEditor、Window 或它们的交互
  • 尝试 table.putClientProperty("terminateEditOnFocusLost") 如果这没有帮助,请显示一个 SSCCE 来说明问题
  • 问题是我希望我的保存方法在按下按钮/窗口关闭时运行但单元格中有未完成的编辑。我不知道如何正确表达,对不起
  • @kleopatra 我对基于AbstractTableModelAbstractTableModelterminateE... 有错误的经验@(HashMap e.i.),对于 DefaultTableModel 有效,奇怪(编辑确保 fireXxxXxx 设置正确:-)

标签: java swing user-interface jtable tablemodel


【解决方案1】:

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

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

不幸的是,在某些情况下,它的最大努力不够好(例如,当用户单击框架的关闭按钮时)。在这些情况下,没有办法,只能钩入可能会丢失编辑的每条车道并手动强制停止编辑

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

根据您对问题的描述,

有些用户只是简单地编辑单元格,然后他们不按回车就关闭窗口

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

另见 Rob 的 blog entry

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 2012-12-11
    • 2012-09-25
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多