【问题标题】:Close one JFrame without closing another?关闭一个 JFrame 而不关闭另一个?
【发布时间】:2010-12-29 00:04:42
【问题描述】:

我想同时显示两个(或更多)JFrames
当我关闭其中一个(使用默认关闭按钮)时,其他框架应该仍然可见。

我该怎么做?

【问题讨论】:

    标签: java swing jframe


    【解决方案1】:

    如果您希望您的应用程序在JFrame 关闭时终止,请使用

    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)
    

    而不是

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    

    来自documentation

    • DO_NOTHING_ON_CLOSE(在 WindowConstants 中定义):什么都不做;要求程序在注册的WindowListener对象的windowClosing方法中处理操作。
    • HIDE_ON_CLOSE(在 WindowConstants 中定义):在调用任何已注册的 WindowListener 对象后自动隐藏框架。
    • DISPOSE_ON_CLOSE(在 WindowConstants 中定义):在调用任何已注册的 WindowListener 对象后自动隐藏和释放框架。
    • EXIT_ON_CLOSE(在 JFrame 中定义):使用系统退出方法退出应用程序。仅在应用程序中使用它。

    这是我在澄清问题之前的回答,可能仍然有用:

    如果您想再次显示同一帧,可以在您的JFrame 上使用setVisible(false)
    否则将dispose() 调用到remove all of the native screen resources

    【讨论】:

    • 谢谢,但我用右上角的关闭按钮关闭了窗口。它没有明确使用 setVisible(false) 并且必须停止线程。
    • 我认为我必须重写一些 mothed,我不知道是哪个 mothed,但我相信它不是关闭 mothed。
    • 我不确定您尝试实现什么,您能否编辑您的问题并添加一些有关您尝试做什么和什么不起作用的信息?
    • 在 init() 为我工作之前调用 DISPOSE_ON_CLOSE.. 谢谢
    【解决方案2】:

    对你有帮助吗?

    import java.awt.BorderLayout;
    
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    
    public class TwoJFrames {
        public static void main(String[] args) {
            int nb = 4;
            if (args != null && args.length > 0) {
                nb = Integer.parseInt(args[0]);
            }
    
            final int frameCount = nb;
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    for (int i = 0; i < frameCount; i++) {
                        JFrame frame = new JFrame("Frame number " + i);
                        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                        JPanel p = new JPanel(new BorderLayout());
                        p.add(new JLabel("Click on the corner to close..."), BorderLayout.CENTER);
                        frame.setContentPane(p);
                        frame.setSize(200, 200);
                        frame.setLocation(100 + 20 * i, 100 + 20 * i);
                        frame.setVisible(true);
                    }
                }
            });
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      相关资源
      最近更新 更多