我正在创建一个全屏模式的javafx应用程序。当我尝试显示警告消息时,我的应用程序被最小化
Alert alert = new Alert(AlertType.INFORMATION);
alert.setTitle(null);
alert.setHeaderText(null);
alert.setContentText("I have a great message for you!");
alert.show();
当我点击提示上的确定按钮时Box应用程序切换回全屏模式。如何在不降低应用程序的情况下全屏显示提示框消息。
答案 0 :(得分:9)
将警报的所有者窗口初始化为全屏阶段。
答案 1 :(得分:1)
我不确定为什么显示警报(即Dialog)结束全屏模式。我认为这是因为对话框本身是一个获得焦点的本机窗口。来自JavaFX API文档(类Stage):
如果全屏舞台失去焦点或另一个舞台在同一个屏幕上进入全屏模式,则将退出全屏模式(并且fullScreen属性将设置为false)。请注意,全屏模式下的舞台可以在不丢失其全屏状态的情况下变为不可见,并在舞台变为可见时再次进入全屏模式。
鉴于这是一个合理的理由,我试图交换舞台场景获得相同的结果。可能更换场景会影响重新计算舞台(即窗口)的大小。接下来的尝试是交换场景的根,这似乎工作。缺点是您丢失了警报的舒适返回值。
public class FullScreenAlert extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Pane rootPane = new StackPane();
Scene mainScene = new Scene(rootPane);
Button btn = new Button("alert");
rootPane.getChildren().add(btn);
Rectangle blockingRect = new Rectangle();
blockingRect.widthProperty().bind(primaryStage.widthProperty());
blockingRect.heightProperty().bind(primaryStage.heightProperty());
blockingRect.setFill(Color.LIGHTBLUE);
blockingRect.setOpacity(0.5);
VBox alertPane = new VBox(10);
alertPane.setBackground(new Background(new BackgroundFill(Color.GRAY, CornerRadii.EMPTY, Insets.EMPTY)));
alertPane.setMaxWidth(400);
alertPane.setMaxHeight(200);
alertPane.setAlignment(Pos.CENTER);
Label alertMessage = new Label("alert message");
Button alertOKButton = new Button("OK");
alertPane.getChildren().addAll(alertMessage, alertOKButton);
btn.setOnAction(event -> {
rootPane.getChildren().addAll(blockingRect, alertPane);
});
alertOKButton.setOnAction(event -> {
rootPane.getChildren().removeAll(blockingRect, alertPane);
});
primaryStage.setFullScreen(true);
primaryStage.setScene(mainScene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
因此,结论是您可以在不触及窗口大小的情况下修改当前场景内容,因此不会丢失全屏模式。这样就应该可以绘制一个漂亮的伪对话框,而不是上面的那个。
我知道这肯定不是最好的解决方案,因为整个应用程序只有一个场景。但我不知道保持全屏模式的更好方法。