我有两个监视器。我在第二个监视器上打开了Eclipse,但是当我运行我的JavaFX代码时,JavaFX窗口总是在第一个监视器中打开,每次我不得不将它拖到第二个监视器上才能使用它。
我必须这样做,因为当它在第一个监视器上打开时,场景中的任何组件都不会被加载。只有当我把它拖到第二个监视器时,它才会被加载。但是当我断开第二个显示器时,它会正常加载。
有人能帮帮我吗?默认情况下,我如何使窗口在第二个监视器上打开?
注意:我的第一个显示器是Macbook Pro,第二个是用作外部监视器的iMac。
对所作评论的答复:
任何简单的screen1代码都会出现组件没有在javaFX上正确加载的问题。例如,为了方便起见,我采用@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并从那里运行代码,它将正确加载:

我还应该补充一点,一旦我将它拖到另一个屏幕上,并且组件被加载,它们在任何屏幕上都能很好地工作。
发布于 2016-01-22 13:45:31
您可以迭代Screen.getScreens()并将您的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);
}
}不幸的是,我无法帮助组件没有加载到主屏幕上。请提供更多的细节来解决这个问题(哪些组件,它们是如何创建的,代码示例等等)
https://stackoverflow.com/questions/34936617
复制相似问题