如何使非模态阶段始终出现在JavaFx全屏阶段

时间:2016-08-07 04:01:37

标签: javafx window fullscreen

我有

  • 用户可以配置为全屏模式的主要阶段
  • 用户可以打开的辅助阶段(工具窗口)。这些窗口应始终位于主要舞台的顶部(无论是否处于全屏模式)。

后者不起作用,即使我将setAlwaysOnTop(true)用于第二阶段,一旦用户点击主要阶段,它们将在主要阶段后消失。 这仅在主要舞台处于全屏模式时发生,如果主要舞台未处于全屏模式,一切正常。 如何在全屏舞台前启用这个工具窗口概念?示例代码:

public class Test extends Application {
    @Override
    public void start(Stage stage) {
        VBox vbox = new VBox();
        Scene scene = new Scene(vbox);
        stage.setScene(scene);

        Button button1 = new Button("New Tool Window");
        button1.setOnAction((e) -> {
            Stage toolStage = new Stage();
            Scene toolScene = new Scene(new Label("Am I on top?"), 300, 250);
            toolStage.setScene(toolScene);
            toolStage.initOwner(stage);
            toolStage.setAlwaysOnTop(true);
            toolStage.show();
        });

        Button button2 = new Button("Close");
        button2.setOnAction((e) -> System.exit(0));

        vbox.getChildren().addAll(button1, button2);
        stage.show();
        stage.setFullScreen(true);
    }

    public static void main(String[] args) {
        launch(args);
    }
}

2016年8月20日更新:确认为错误:JDK-8164210

2 个答案:

答案 0 :(得分:0)

绕过此限制的一种方法是: 取消激活全屏模式 为psuedo全屏创建一个keyCombination 将舞台风格设置为未修饰且不可调整大小 将屏幕设置为用户屏幕的大小,并将其定位在0,0。

很容易创建自己的边框以最小化和关闭程序,如下所示:

JavaFX Stage.setMaximized only works once on Mac OSX (10.9.5)

在这里:

JavaFX 8 Taskbar Icon Listener

答案 1 :(得分:0)

你需要在设置initowner

之后设置initmodality
toolStage.initOwner(stage);
toolStage.initModality(Modality.APPLICATION_MODAL);