2016-01-21 72 views
6

我有两个监视器。我在第二个监视器上打开了Eclipse,但是当我运行我的JavaFX代码时,JavaFX窗口总是在第一个监视器中打开,每次我必须将它拖动到第二个监视器以使用它。选择哪个监视器打开一个JavaFX窗口

我必须这样做,因为当它在第一台显示器上打开时,场景中的所有组件都不会被加载。只有当我将它拖到第二台显示器时才会加载它。但是当我断开第二台显示器时,它正确加载。

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

注意:我的第一台显示器是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); 
    } 
} 

当我启动这个无论从使用Eclipse或与终端屏幕2,这是在屏幕上1显示的内容: Faulty load 调整窗口不显示我的组件,但只是缩放他们。我也无法点击按钮。

当我拖动这对屏幕2,它成为这样的: loaded

与其他两台监视器仍然连接,如果我拖动蚀到屏幕1和运行从那里代码,它加载适当:runs properly

我还应该补充说,一旦我将它拖到另一个屏幕并加载了组件,它们就可以在任何屏幕上正常工作。

+1

您可能很有可能通过'Screen'工作。请参阅[这里](https://community.oracle.com/thread/2593365?tstart=0)(暂时没有时间去完成答案)。 – Itai

+0

我同意@sillyfly使用'Screen'。然而从你的描述来看,仅在第二个屏幕上加载内容我猜这有些严重的错误或者是这种打算的行为?如果没有,您应该调查并修复它,而不是实施解决方法。 – hotzst

+1

你能提供一个我可以在双显示器设置上测试的例子吗? –

回答

6

您可以迭代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); 
    } 
} 

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

+0

我已经在问题中添加了更多信息 –