0

我有一个应用程序,有时我使用“模态”较小的窗口。为了模拟这种模态行为,我所做的是将它们定义为 JFrame 的扩展,禁用主应用程序框架并将默认关闭操作设置为不执行任何操作。问题在于 JFrame 不能有父级,因此,当用户单击关闭窗口的按钮时,它实际上会关闭,系统会返回上次使用的应用程序,这并不总是想要的效果(例如,用户打开模态窗口,然后他/她 Alt+Tabs 进入另一个应用程序,然后切换回模态窗口并关闭它,从而呈现最后一个应用程序,而不是我的主框架)。有什么方法可以做到这一点(将 JFrame 绑定到父级或类似的东西......?)。

4

2 回答 2

2

你为什么不使用一个JDialog?:-)

于 2013-03-12T18:14:15.170 回答
0

您可以将 JFrame 参数添加到构造函数并在内部将其保存为父级,并将子级的引用保存在父级的列表中。然后您可以覆盖 dispose 方法并在关闭窗口之前关闭所有子/父。

例如:

public class ParentWindow extends JFrame {

    //Here you add children when you create them
    List<JFrame> children = new ArrayList<JFrame>();

    @Override
    public void dispose() {
        for(JFrame f : children) {
            f.dispose();
        }
        super.dispose();
    }

    public void randomMethod() {
        JFrame newWindow = new JFrame(this);
        children.add(newWindow);
    }
}

public class ChildWindow extends JFrame {

    //Here you save the parent window
    JFrame parent;
    public ChildWindow(JFrame parent) {
         this.parent = parent;
    }

    @Override
    public void dispose() {
        parent.dispose();
        super.dispose();
    }
}
于 2016-04-17T17:47:14.393 回答