繁体   English   中英

当用户关闭应用程序窗口时,是否有一种优雅的方法可以使JTable停止编辑?

[英]Is there an elegant way to make JTable stop editing when user closes the application window?

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

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

  • 假设用户必须从表中导航以单击Exit控件,您应该通过设置表的"terminateEditOnFocusLost"属性来获得所需的结果。

     table.putClientProperty("terminateEditOnFocusLost", true); 
  • 如果你有诉诸WindowListener或类似的,你可以明确地示出停止编辑在这里

     CellEditor cellEditor = table.getCellEditor(); if (cellEditor != null) { if (cellEditor.getCellEditorValue() != null) { cellEditor.stopCellEditing(); } else { cellEditor.cancelCellEditing(); } } 
  • 因为主机拥有该框架的装饰品,有些平台需要特殊处理拦截严密控制,为讨论在这里

  • Preferences尽最大努力保持更新的值。

到目前为止,这是我最满意的解决方案:

我的所有JTable对象都将自己安装为HierarchyListener,并使用以下方法来处理HierarchyEvent:

public void hierarchyChanged(HierarchyEvent e) {
    Window win = SwingUtilities.getWindowAncestor(this);
    if ((win != null) && (!win.equals(topLevelWindow))) {
        topLevelWindow = win;
        topLevelWindow.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                handleWindowClosing();
            }

        });
    }
}

private void handleWindowClosing() {
    if (table.isEditing()) {
        table.getCellEditor().cancelCellEditing();
    }
}

在我工作的项目的情况下,在应用程序窗口关闭时取消编辑是至关重要的,因为它发送记录不再处于编辑状态的通知...

使用层次结构监听器也很重要,因为我的JTable对象从dockable移动到dockable(我们在这里使用优秀的Docking Frames ),并且可以在不同的时间在不同的窗口中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM