2个JFrame有2个单独的关闭按钮?

时间:2011-04-29 15:20:24

标签: java swing jframe

我正在使用JMenuBar创建一个小应用程序,现在,我有一个menuitem,它是一个商店,它打开一个新的JFrame。当我点击按钮时,会出现一个新的JFrame,一切都很好。但是,当我单击Store JFrame的关闭按钮时,我不希望我的主JFrame关闭。如果我现在按下商店关闭按钮,它将关闭主JFrame和商店JFrame,为这两个JFrame制作2个单独的关闭按钮的任何帮助?主JFrame的代码:

    public static void main(String[] args){

    //Create new JFrame
    JFrame frame = new JFrame();
    frame.setTitle("MrStan");
    frame.setSize(200, 200);
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frame.setJMenuBar(menubar);

    //Set location of JFrame
    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
    int screenWidth = (int) dim.getWidth();
    int screenHeight = (int) dim.getHeight();
    frame.setLocation(screenWidth / 2 - 200, screenHeight / 2 - 200);

    //Set ContentPane to JPanel
    MrStan panel = new MrStan();
    frame.setContentPane(panel);

    //Make the user not be able to resize
    frame.setResizable(false);

    //Make the JFrame visible
    frame.setVisible(true);

}

我的商店JFrame:

    public MrStanStore(){   
    JFrame frame2 = new JFrame();
    frame2.setTitle("Store");
    frame2.setSize(300, 200);
    frame2.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

    //Set location of JFrame
    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
    int screenWidth = (int) dim.getWidth();
    int screenHeight = (int) dim.getHeight();
    frame2.setLocation(screenWidth / 2 - 200, screenHeight / 2 - 200);

    //Make the user not be able to resize
    frame2.setResizable(false);

    //Make the JFrame visible
    frame2.setVisible(true);
}

2 个答案:

答案 0 :(得分:2)

不要使用2个JFrame。通常,应用程序应该有一个JFrame,然后使用JDialogs作为支持窗口。 JDialogs在关闭时不支持退出VM,因此这不会成为问题。

如果您使用JFrame,则应使用DISPOSE_ON_CLOSE。然后当最后一帧关闭时,VM将自动退出。

答案 1 :(得分:1)

您之前是否曾将JFrame.setDefaultCloseOperation称为EXIT_ON_CLOSE之类的内容?尝试将其设置为DO_NOTHING_ON_CLOSE,您可以按照自己的方式处理关闭事件。