我的java代码中有两个JFrame,当我关闭一帧时,第二帧自动关闭,请告诉我如何使它们彼此独立?
我的代码是这样的:
JFrame frame1 = new JFrame();
JFrame frame2 = new JFrame();
frame1.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame1.setUndecorated(true);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setVisible(true);
frame2.setSize(200,100);
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame2.setVisible(true);
答案 0 :(得分:3)
你的是一个常见的Swing新手错误,虽然是的,你可以将JFrame默认关闭操作设置为DO_NOTHING_ON_CLOSE
,然后你仍然会遇到错误的程序设计。
相反,您几乎不应该一次显示两个JFrame,因为JFrame旨在显示主应用程序窗口,并且大多数应用程序(包括特别是专业应用程序)都没有多个应用程序窗口。相反,做出母亲"窗口一个JFrame,子窗口或依赖窗口是一个JDialog,你的问题解决了,当子窗口关闭时,应用程序必须保持打开状态。 JDialog还有一个额外的好处,就是根据需要允许它是模态的或非模态的。
其他不错的解决方案,包括完全避免多个窗口,包括使用JTabbedPane或CardLayout来交换视图。
请阅读:The use of multiple JFrames, good bad practice
修改强>
例如
import java.awt.Dialog.ModalityType;
import java.awt.Dimension;
import javax.swing.*;
public class DialogEx {
private static void createAndShowGui() {
JFrame frame1 = new JFrame("DialogEx");
frame1.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame1.setUndecorated(true);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setVisible(true);
JDialog nonModalDialog = new JDialog(frame1, "Non-Modal Dialog", ModalityType.MODELESS);
nonModalDialog.add(Box.createRigidArea(new Dimension(200, 200)));
nonModalDialog.pack();
nonModalDialog.setLocationByPlatform(true);
nonModalDialog.setVisible(true);
JDialog modalDialog = new JDialog(frame1, "Modal Dialog", ModalityType.APPLICATION_MODAL);
modalDialog.add(Box.createRigidArea(new Dimension(200, 200)));
modalDialog.pack();
modalDialog.setLocationByPlatform(true);
modalDialog.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
答案 1 :(得分:1)
这是因为您将两个帧的默认关闭操作设置为EXIT_ON_CLOSE
,因此无论您单击哪个帧的关闭按钮,该程序都会退出。对于您的主框架,您可以将其设置为EXIT_ON_CLOSE
,而对于其他框架,您可以将其设置为DO_NOTHING_ON_CLOSE
。
此外,正如其他人建议使用JDialog
而不是多个框架。