我有一个类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());
}
}
答案 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);