我想强制将警报置于其他应用程序之上。警报似乎缺少setAlwaysOnTop函数。

我看过这篇文章:JavaFX 2.2 Stage always on top

我试过了:

  • 创建一个新的stage和stage.setAlwaysOnTop(true),然后创建alert.initOwner(stage)。
  • 创建一个新的stage和stage.initModality(Modality.APPLICATION_MODAL),然后创建alert.initOwner(stage)。

  • 有谁知道如何实现这一目标?

    编辑:
    我正在使用Java 8。

    可以说我已经打开了 Safari ,并且正在集中精力。当我调用警报的showAndWait()函数时,我想将警报显示在屏幕的顶部,在 Safari 的前面。

    最佳答案

    您可以从DialogPane中“窃取” Alert并将其显示在实用程序Stage中。对于此窗口,您可以按常规方式设置alwaysOnTop属性:

    Alert alert = new Alert(Alert.AlertType.WARNING, "I Warn You!", ButtonType.OK, ButtonType.CANCEL);
    DialogPane root = alert.getDialogPane();
    
    Stage dialogStage = new Stage(StageStyle.UTILITY);
    
    for (ButtonType buttonType : root.getButtonTypes()) {
        ButtonBase button = (ButtonBase) root.lookupButton(buttonType);
        button.setOnAction(evt -> {
            root.setUserData(buttonType);
            dialogStage.close();
        });
    }
    
    // replace old scene root with placeholder to allow using root in other Scene
    root.getScene().setRoot(new Group());
    
    root.setPadding(new Insets(10, 0, 10, 0));
    Scene scene = new Scene(root);
    
    dialogStage.setScene(scene);
    dialogStage.initModality(Modality.APPLICATION_MODAL);
    dialogStage.setAlwaysOnTop(true);
    dialogStage.setResizable(false);
    dialogStage.showAndWait();
    Optional<ButtonType> result = Optional.ofNullable((ButtonType) root.getUserData());
    System.out.println("result: "+result.orElse(null));
    

    关于JavaFX如何将对话框/警报显示在屏幕的前面,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38799220/

    10-13 03:26