当用户关闭主应用程序窗口时,我试图找到一种优雅的方法来使JTable停止单元格编辑(实际上取消它)。我知道可以使用WindowAdapter完成类似的操作,但是要使其正常工作,我需要对窗口的引用。问题是我有时没有它。

最佳答案

突然退出可能需要在多个级别进行处理。


假设用户必须离开表才能单击Exit控件,则应通过设置表的"terminateEditOnFocusLost"属性来获得所需的结果。

table.putClientProperty("terminateEditOnFocusLost", true);

如果您必须诉诸WindowListener或类似名称,则可以明确地停止编辑,如here所示。

CellEditor cellEditor = table.getCellEditor();
if (cellEditor != null) {
    if (cellEditor.getCellEditorValue() != null) {
        cellEditor.stopCellEditing();
    } else {
        cellEditor.cancelCellEditing();
    }
}

因为主机拥有框架装饰,所以某些平台需要特殊处理才能拦截关闭控制,如here所述。
Preferences尽最大努力保持更新的值。

10-07 20:12