我有一个游戏,试图拦截关闭事件并使用户返回主菜单。我已经使用DO_NOTHING_ON_CLOSE
弄清了一半,但是问题是我无法将常规功能返回到菜单屏幕。
您可能知道,问题在于,如果windowClosing
是操作,则DO_NOTHING...
方法显然是最后触发的侦听器。
所以,我的问题是,在完成EXIT_ON_CLOSE
之后,如何将NOTHING
返回到窗口?同时,我想在没有任何用户输入的情况下进行操作。我可以切换到另一个JFrame并从那里处理它,但是必须有一种更好的方法来实现它。
代码示例:
WindowAdapter waReturnToMenu = new WindowAdapter() {
@Override
public void windowClosing(final WindowEvent e) {
view.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
changeMenuState(0);
}
};
然后,在更改菜单状态下:
public void changeMenuState(int i0) {
//...screen returns to menu, then
view.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
最佳答案
为什么不在WindowListener中包含此逻辑,因为在尝试关闭时会调用此逻辑?您的代码设置了一个布尔变量的状态,以告知WindowListener是否希望它使用户返回程序或关闭程序。在WindowListener中,您将检查此布尔变量的状态,如果状态是某个值,请通过System.exit(...)
退出程序。
(回答)
例如。,
// class field
private boolean canClose = false;
//....
WindowAdapter waReturnToMenu = new WindowAdapter() {
@Override
public void windowClosing(final WindowEvent e) {
if (canClose) {
System.exit(0);
} else {
changeMenuState(0);
}
}
};
然后,在更改菜单状态下:
public void changeMenuState(int i0) {
//...screen returns to menu, then
canClose = true;
}