import javax.swing.JFrame;
public class Driver00
{
public static void main(String[] args)
{
/*Create a frame (outside box) and write what text
will be displayed as the frame title*/
JFrame frame = new JFrame("Casino Blackjack");
JFrame frame2 = new JFrame("Rules and Information");
//allows JFrame to be maximiazed on open
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame2.setExtendedState(JFrame.MAXIMIZED_BOTH);
//give frame a size
// frame.setSize(2000,2000);
//set location on the computer screen will frame appear
//frame.setLocation(200, 150);
//use this so when you press X in corner, frame will close
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Add your panel to the frame. name must match Panel class name
frame.setContentPane(new PanelProject());
frame2.setContentPane(new Rules());
// always include
frame.setVisible(true);
frame2.setVisible(true);
}
}
这是启动我的GUI的应用程序,我的问题是,如果我没有注释掉frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
行并点击x
按钮,它会同时关闭{{1} }和frame
。它也是另一种方式。如果我没有注释掉frame2
而不是frame
的同一行,并点击frame2
按钮,它会关闭两个帧。
我希望能够关闭框架或其他框架,而不必担心两个框架都被关闭。
答案 0 :(得分:3)
“我希望能够关闭框架或其他框架,而不必担心两个框架都被关闭。”
首先,您需要查看The Use of Multiple JFrames, Good/Bad Practice?。只是强调,大多数选民倾向于“坏”方面。
话虽这么说,你应该考虑你的帧的语义。即仅为游戏说明打开另一帧。这似乎是合理的,但如果您理解modality,您可能会同意,对于此场景使用辅助帧,模式JDialog
会更合适,因为主要游戏框架的交互当指令对话框打开时,将被阻止。请点击How to Make Dialogs
如果您不想使用两个单独的窗口,另一个选项是使用CardLayout
。这将允许您在视图之间切换。因此,当提示说明时,游戏将移出视图,并将指令放入视图中。反之亦然。您可以在How to use CardLayout查看更多信息。另请参阅一个简单示例here
答案 1 :(得分:1)
DISPOSE_ON_CLOSE 要么 System.exit(0);
您也可以在x的点击上设置可见性,将其设置为false,使其看起来已关闭。然后当应用程序完成时,x将关闭两个
答案 2 :(得分:0)
为什么你的JFrames
都属于一个班级?您应该将GUI逻辑分开,以便一个屏幕等于一个类。它可以实现更好的管理,特别是如果那些JFrames
变得更复杂。
如果您的框架被分隔成单独的类,则以下代码可以正常工作:
// this is important
mainFrame.setDefaultCloseOperation(
WindowConstants.DO_NOTHING_ON_CLOSE);
mainFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
// mainFrame being the frame you want to close
mainFrame.setVisible(false);
mainFrame.dispose();
}
});
System.exit(0)
用于关闭整个程序,这不是您想要的。
但是,如果您将JFrames
同时保留在一个班级中,则需要添加一些逻辑,以便如果只剩下一个JFrame
,则需要完全关闭程序。
尽管如此,无论如何都包括它可能是有用的。
我提供这个作为@peeskillet答案的替代品,因为它需要你的工作量更少。但是,我建议您自己阅读答案并自行研究,因为 非常重要:)
(我自己使用多个JFrames
,并且只是将其视为体面的对象管理问题,以便有效地维护它们。
修改强>:
4 ::为什么我更喜欢设置自定义
WindowListener
而不是使用DISPOSE_ON_CLOSE
,这仅仅是因为我经常有与程序关闭相关的自定义代码。我发现它给了我更多的创作自由。您可能会发现
DISPOSE_ON_CLOSE
更适合您。
EDITEDIT :StackOverflow处理列表的方式很蠢。