我正在编写一个GUI。我要在关闭后打印一些东西。但是WindowListener
不起作用。我写了一个窗口,然后我想有一个boolean
来标记窗口已关闭。因此,之后我可以在if子句中使用该boolean
来编写下一个应在Windows关闭后执行的语句。
public class MyFrame extends JFrame implements WindowListener {
private boolean close=false;
MyFrame() {
this.close=false;
setSize(300,250);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
addWindowListener(this);
// after help, I've added addWindowListener although still don't
//work
}
public void windowOpened()/windowIconified()/windowDeiconified()...
public void windowClosing(WindowEvent e) {close=true;}
public void windowClosed(WindowEvent e) {close=true;}
}
public class MyFrameControl {
MyFrame setframe() {
MyFrame fr = new MyFrame();
fr.setVisible(true);
return fr;
}
}
public class test {
public static void main(String args[]) {
MyFrameControl frameCtrl= new MyFrameControl();
MyFrame tmpFrame = frameCtrl.setframe();
if(tmpFrame.close==true) {
System.out.println("close is true");
}
}
}
当我关闭JFrame
/ MyFrame
时,执行打印行时是否应该将布尔值close
设为true
?
添加addWindowListener之后在JFrame下仍然无法工作,除了切换到JDialogue之外,在JFrame下还有什么解决方法吗?
答案 0 :(得分:0)
不。
您的代码不等待JFrame
重新关闭,就像已经提到的@Abra一样,您永远不要将中。 WindowListener
添加到JFrame
您的k.setVisible(true)
立即返回,并且您的框架仍然可见。
因此,在检查条件时不会调用windowClosing()
/ windowClosed()
。
也许您可以将JFrame
转换为JDialog
,可以将其设置为modal
(setModal()
/ setModalityType()
)。关闭对话框后,将返回模式对话框的setVisible()
。
要使用JFrame
进行模拟,您必须以某种方式等待关闭发生。您可以将System.out...
放入线程(Runnable
)中,该线程一直等待到close==true
。
根据定义,JFrame
不是模态(How to make a JFrame Modal in Swing java)