【问题标题】:Disabling red 'X' button from closing entire JavaFX program w/ Java8?禁用红色“X”按钮以关闭带有 Java8 的整个 JavaFX 程序?
【发布时间】:2017-01-02 02:40:56
【问题描述】:

我遇到了一些问题。我正在为客户创建一个程序。在程序中,我实现了一个专用的“关闭/关闭”按钮——它需要密码才能正确关闭。但是关闭程序的另一种(并且不太安全)方法是点击红色关闭或“X”按钮:右上角(Windows)或左上角(Mac)。

我不希望红色 x 按钮实际关闭整个程序。我想知道的是:是否可以完全禁用红色“x”按钮关闭整个程序?如果可能,有人可以为此提供代码吗?

我正在使用:IntelliJ IDEA (Ultimate)、JavaFX with Java 8、Dev。语言:Java

【问题讨论】:

  • “我不希望红色 x 按钮实际关闭整个程序”。你能在这里澄清你想要什么吗?您希望它仍然关闭窗口,但您希望程序在窗口关闭时继续运行?如果这就是你的意思,你只需要Platform.setImplicitExit(false);。

标签: button javafx disabled-control


【解决方案1】:

为舞台的onCloseRequest 事件添加一个事件处理程序。这允许您通过使用事件并执行您自己的关闭过程来防止窗口关闭:

private void shutdown(Stage mainWindow) {
    // you could also use your logout window / whatever here instead
    Alert alert = new Alert(Alert.AlertType.NONE, "Really close the stage?", ButtonType.YES, ButtonType.NO);
    if (alert.showAndWait().orElse(ButtonType.NO) == ButtonType.YES) {
        // you may need to close other windows or replace this with Platform.exit();
        mainWindow.close();
    }
}

@Override
public void start(Stage primaryStage) {
    primaryStage.setOnCloseRequest(evt -> {
        // prevent window from closing
        evt.consume();

        // execute own shutdown procedure
        shutdown(primaryStage);
    });

    StackPane root = new StackPane();

    Scene scene = new Scene(root, 100, 100);

    primaryStage.setScene(scene);
    primaryStage.show();
}

【讨论】:

  • 再一次,我已经有一个专用的关闭按钮,该按钮通向一个新窗口(阶段),要求用户输入“关闭代码” - 由 setOnAction(ActionEvent e )->{}。只有员工会知道这些信息。我想要的是,如果客户意外(或故意)按下红色 X,它会将他们引导到与实施的“关闭”相同的位置。我不想复制舞台、场景等。我只想让程序这样做:按下红色 x?.. 转到处理手动关闭过程的 setOnAction(ActionEvent e) ->。
  • @YuriKhechoyan 你写那条评论是因为???是否显示Alert 或启动其他程序以允许用户关闭程序完全取决于您。您也可以替换场景并显示一些注销屏幕,如果您想这样处理...
  • 有效!!再次感谢你!我只需要对您提供的一些代码进行一些修改!非常感谢!
  • 如何让队列中的某个元素发生某些事情?例如:如果某人在队列中排在第 100 位 = 'System.out.println("恭喜!您是第 100 位客户!");'
  • @YuriKhechoyan 请不要在 cmets 中提出新的、不相关的问题,而是将它们作为新问题提出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
  • 2015-11-10
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 2013-09-26
  • 1970-01-01
相关资源
最近更新 更多