我遇到了以下问题:我有一个JTable,它的on tablemodel坐在JFrame上。 tablemodel使用自己的hashmap进行备份以存储内容。该表有两列,右侧可编辑。
通常用户更改右侧的某个值然后按下Enter按钮,该按钮会触发调用我的保存功能的tabledatachanged事件。然后可以关闭框架。
然而,有些用户只是简单地编辑单元格,然后他们关闭窗口而不按Enter键,所以我没有机会保存表格。我知道如何在框架即将关闭时编写事件,但我不知道如何在完成编辑的同时检索“未完成”编辑的内容。
我想这与celleditors有关,我甚至尝试使用table.getCellEditor()来返回活动的,但它返回null。
感谢您的帮助!
答案 0 :(得分: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的blog entry