java - 禁用 javafx 警报的移动

标签 java netbeans javafx alert

我的“你想退出吗”界面有问题。

从今天开始,我可以将警报框移动到我想要更改的位置 - 最好将警报固定在设定位置(在屏幕中间)。

此警报能够四处移动的问题在于,在具有多个屏幕的设置中,您可以将其移动到任何您想要的位置(例如游戏界面之外)。

    Button btExit = new Button("Exit Game");
    btExit.setMinWidth(100);
    buttonGrid.add(btExit, 0, 5);
    btExit.setOnAction(new EventHandler<ActionEvent>() 
    {
        @Override
        public void handle(ActionEvent event) 
        {
            Alert alert = new Alert(AlertType.CONFIRMATION);
            alert.setTitle("");
            alert.initModality(Modality.APPLICATION_MODAL);
            alert.initOwner(primaryStage);
            alert.setHeaderText("Quit Game");
            alert.setContentText("Are you sure?");

            Optional<ButtonType> result = alert.showAndWait();
            if (result.get() == ButtonType.OK){
                System.exit(1);
            }else 
            {
                alert.close();
            }

        }
    });

最佳答案

如果您想阻止用户移动对话框,只需将样式设置为 UNDECORATED 即可删除用户可以用来在警报周围移动的窗口边框(以及 x 按钮,但用户可以通过另一种方式关闭对话框):

@Override
public void start(Stage primaryStage) {
    Button btn = new Button("Show alert");
    btn.setOnAction((ActionEvent event) -> {
        Alert alert = new Alert(AlertType.CONFIRMATION);
        alert.getDialogPane().setStyle("-fx-border-color: black;");
        alert.initModality(Modality.APPLICATION_MODAL);

        alert.initStyle(StageStyle.UNDECORATED);

        alert.initOwner(primaryStage);
        alert.setHeaderText("Quit Game");
        alert.setContentText("Are you sure?");

        Optional<ButtonType> result = alert.showAndWait();
        if (result.orElse(null) == ButtonType.OK) {
            Platform.exit();
        }
    });

    StackPane root = new StackPane();
    root.getChildren().add(btn);

    Scene scene = new Scene(root, 600, 400);

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



我在这里做的一些其他修改:

  • 替换

    System.exit(1);
    

    Platform.exit();
    

    更优雅地关闭应用程序。毕竟状态代码 1 表示异常终止

  • 移除

    else 
    {
        alert.close();
    }
    

    这从来都不是必需的,因为 showAndWait 只会在 Alert 关闭后返回...

  • 用过

    result.orElse(null)
    

    即使 Optional 为空,也能无错误地检索值(不能 100% 确定在这种情况下会发生这种情况,但这样做并没有坏处)。

关于java - 禁用 javafx 警报的移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41520919/

相关文章:

Netbeans 中的 Java 代码可以工作,但通过 cmd 提示符执行 jar 会出现 nosuchmethod 错误异常

licensing - JavaFX 2.0 可以重新分发吗?

java - JavaFX 是否有办法创建分组堆积条形图?

java - 如何使用 S4 Cloud SDK 连接访问 RabbitMQ 后面的目标服务

java - 访问 java web 应用程序时出错

java - 为什么非静态最终成员变量不需要遵循常量命名约定?

JavaFX 中的多线程

Java HTMLUnit - 如何访问提交表单后发送到的页面 DOM

java - 如何仅针对三个不同选项找到句子的第一个单词

tomcat - 无法读取 <CATALINA_HOME>/conf/server.xml