退出Jframe窗口时出错

时间:2014-03-14 13:14:43

标签: java swing jframe

我有一个类Jframe的窗口,它包含一个按钮。在单击该按钮时,将打开类Jframe的第二个窗口。在单击第二个窗口的关闭或退出按钮时,第一个窗口也会与第二个窗口一起关闭。 为什么会这样?

下面是我的代码: //这是我的第一个文件

class Frame1 extends JFrame
{
Frame1()
{
        super("hello this is window 1");
        setVisible(true);
        setSize(400,400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout());
        JButton btn = new JButton("open second window");
       btn.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
                System.out.println("button clicked");
                Frame2 obj2 = new Frame2();
        }
    });
    add(btn);
}

public static void main(String args[])
{
        Frame1 obj = new Frame1();
}
}

// this is my second file
class Frame2 extends JFrame
{
Frame2()
{
        super("hello this is window 2");
        setVisible(true);
        setSize(400,400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout());
}
}

4 个答案:

答案 0 :(得分:2)

尝试更改默认关闭事件(退出程序),然后显式关闭该JFrame。

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));

一些可能有用的链接:

http://tips4java.wordpress.com/2009/05/01/closing-an-application/
http://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html
https://stackoverflow.com/a/1235283/2407870

答案 1 :(得分:1)

将setDefaultCloseOperation()参数的值更改为JFrame.DO_NOTHING_ON_CLOSE,以防止第二帧关闭第一帧

答案 2 :(得分:1)

尝试在第二帧中添加窗口侦听器,然后将其丢弃,例如:

frame2.addWindowListener(new java.awt.event.WindowAdapter() {
    @Override
    public void windowClosing(java.awt.event.WindowEvent windowEvent) {
        frame2.dispose();
    }
});

OR

frame2.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);

但请注意,在您的应用中使用多个JFrame's并非良好做法,请使用一个JFrame和多个Dialogs

答案 3 :(得分:1)

Frame2班级

中删除此行
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

然后将其添加到同一行:

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);