我想强制将警报置于其他应用程序之上。警报似乎缺少setAlwaysOnTop函数。
我看过这篇文章:JavaFX 2.2 Stage always on top。
我试过了:
有谁知道如何实现这一目标?
编辑:
我正在使用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/