繁体   English   中英

选择打开JavaFX窗口的监视器

[英]Choose which monitor does a JavaFX window open in

我有两台显示器。 我在第二台显示器上打开了Eclipse,但是当我运行JavaFX代码时,JavaFX窗口总是在第一台显示器中打开,每次我必须将它拖到第二台显示器上才能使用它。

我必须这样做,因为当它在第一个监视器上打开时,场景中没有任何组件被加载。 仅当我将其拖动到第二个监视器时才会加载它。 但是,当我断开第二台显示器时,它会正确加载。

有人可以帮帮我吗? 默认情况下,如何在第二台显示器上打开窗口?

注意:我的第一台显示器是Macbook Pro,第二台是用作外接显示器的iMac。

回应评论:

任何简单的javaFX代码都会出现组件在screen1上无法正确加载的问题。 例如,为了方便起见,我将@Sergey提供的代码作为答案。

码:

public class FXScreens extends Application {

    @Override
    public void start(Stage stage) {
        VBox root = new VBox(10);
        root.setAlignment(Pos.CENTER);
        Scene scene = new Scene(root, 200, 250);

        int index = 1;
        for (Screen screen : Screen.getScreens()) {
            Rectangle2D bounds = screen.getVisualBounds();

            Button btn = new Button("Move me to Screen " + index++);
            btn.setOnAction((e) -> {
                stage.setX(bounds.getMinX() + 100);
                stage.setY(bounds.getMinY() + 100);
            });
            root.getChildren().add(btn);
        }

        stage.setTitle("Screen Jumper");
        stage.setScene(scene);
        stage.show();
    }

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

当我使用eclipse或终端从screen2启动它时,这是屏幕1上显示的内容: 负载错误 调整窗口大小不会向我显示组件,只是缩放它们。 我也无法点击按钮。

当我将其拖到屏幕2时,它变成这样: 装

还有两个其他监视器仍然连接,如果我将eclipse拖到screen1并从那里运行代码,它会正确加载: 运行正常

我还应该补充一点,一旦我将其拖动到另一个屏幕并加载了组件,它们在任何屏幕上都能很好地工作。

您可以迭代Screen.getScreens()并将您的stage移动到所需的stage 见下面的例子。

public class FXScreens extends Application {

    @Override
    public void start(Stage stage) {
        VBox root = new VBox(10);
        root.setAlignment(Pos.CENTER);
        Scene scene = new Scene(root, 200, 250);

        int index = 1;
        for (Screen screen : Screen.getScreens()) {
            Rectangle2D bounds = screen.getVisualBounds();

            Button btn = new Button("Move me to Screen " + index++);
            btn.setOnAction((e) -> {
                stage.setX(bounds.getMinX() + 100);
                stage.setY(bounds.getMinY() + 100);
            });
            root.getChildren().add(btn);
        }

        stage.setTitle("Screen Jumper");
        stage.setScene(scene);
        stage.show();
    }

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

不幸的是,我无法帮助未在主屏幕上加载的组件。 请提供更多详细信息以解决这些问题(哪些组件,它们是如何创建的,代码示例等)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM