53

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

我怎样才能做到这一点?

4

2 回答 2

87

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

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)

代替

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

文档中:

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

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

如果您想再次显示同一帧,您可以使用setVisible(false)您的。否则调用以删除所有本机屏幕资源JFrame
dispose()

于 2009-12-22T06:19:37.673 回答
3

它对你有帮助吗?

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);
                }
            }
        });

    }
}
于 2009-12-22T07:17:13.797 回答