我有两个显示器。我在第二个显示器上打开了Eclipse,但当我运行JavaFX代码时,JavaFX窗口总是在第一个显示器上打开,每次我都必须将其拖到第二个显示器上才能使用。
我必须这样做,因为当它在第一个显示器上打开时,场景中的所有组件都没有加载。只有当我将它拖到第二个显示器上时,它才会被加载。但是当我断开第二个显示器时,它可以正常加载。
有人可以帮帮我吗?如何默认使窗口在第二个显示器上打开?
NB:我的第一个显示器是Macbook Pro,第二个是用作外部显示器的iMac。
回应评论:
在屏幕1上组件无法正确加载的问题发生在任何简单的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);
}
}
当我从屏幕2中使用eclipse或终端运行时,在屏幕1上会出现以下情况:
![Faulty load](https://istack.dev59.com/O4xVs.webp)
当我将它拖到屏幕2上时,就变成了这样:
![loaded](https://istack.dev59.com/jtBcc.webp)
![runs properly](https://istack.dev59.com/8ZX0Q.webp)
Screen
找到一些解决方案。请参见此处(目前没有时间完整回答)。 - ItaiScreen
的看法。然而,根据你的描述,内容仅在第二个屏幕上加载,我猜这里有一些严重的问题或者这是预期行为?如果不是,请调查并修复该问题,而不是实施绕过方法。 - hotzst