【发布时间】:2010-12-29 00:04:42
【问题描述】:
我想同时显示两个(或更多)JFrames。
当我关闭其中一个(使用默认关闭按钮)时,其他框架应该仍然可见。
我该怎么做?
【问题讨论】:
我想同时显示两个(或更多)JFrames。
当我关闭其中一个(使用默认关闭按钮)时,其他框架应该仍然可见。
我该怎么做?
【问题讨论】:
如果您不希望您的应用程序在JFrame 关闭时终止,请使用
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 中定义):使用系统退出方法退出应用程序。仅在应用程序中使用它。 这是我在澄清问题之前的回答,可能仍然有用:
如果您想再次显示同一帧,可以在您的JFrame 上使用setVisible(false)。
否则将dispose() 调用到remove all of the native screen resources。
【讨论】:
对你有帮助吗?
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);
}
}
});
}
}
【讨论】: