Java Swing - 将所有JFrame保持在一起

时间:2013-03-12 18:11:33

标签: java swing jframe

我有一个应用程序,有时我使用“模态”,较小的窗口。为了模拟这种模态行为,我所做的是将它们定义为JFrame的扩展,禁用主应用程序框架并将默认关闭操作设置为什么都不做。这个问题是JFrame不能有父,所以,当用户点击按下窗口关闭窗口时,它实际上关闭,系统回到最后使用的应用程序,这并不总是所需的效果(例如,用户打开模态窗口,然后他/她Alt / Tabs到另一个应用程序,然后切换回模态窗口并关闭它,导致这被呈现在最后一个应用程序,而不是我的主框架)。有没有办法做到这一点(将JFrame绑定到父类或类似的东西......?)。请注意,JOptionPane不是一个选项,因为这些较小的窗口需要在每个窗口中包含20个不同的自定义组件。

2 个答案:

答案 0 :(得分:2)

为什么不使用JDialog? : - )

答案 1 :(得分: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();
    }
}