我有一个游戏,试图拦截关闭事件并使用户返回主菜单。我已经使用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;
}

09-05 00:50