2016-09-29 55 views
2

在构建这个应用程序时偶然遇到这个问题,现在真的阻碍了我们的功能。某些JavaFX布局是否与Mac电脑不兼容?

Screen screen = Screen.getPrimary(); 
     Rectangle2D bounds = screen.getVisualBounds(); 
     overallStage.setX(bounds.getMinX()); 
     overallStage.setY(bounds.getMinY()); 
     overallStage.setWidth(bounds.getWidth()); 
     overallStage.setHeight(bounds.getHeight()); 

这是允许在用户登录之后,屏幕的最大化:这个问题首先在我的其他开发人员(使用MAC)试图运行应用程序时,我改变影响舞台上的一行代码开始。在mac用户登录后,舞台将最小化为左下角的一个小窗口,然后消失。现在有一件类似的事情正在发生,我做了一个新的添加。

enter image description here

我做了这个除了在应用程序中包含一个侧面菜单。正如你所看到的,我将整个场景包装在一个堆叠窗格中,然后用侧边菜单的外部锚点窗格将锚定窗格(参见层次结构)包裹起来。现在完全一样的事情发生在两个不同的Mac上最小化和消失的地方,Windows非常好。

有什么东西导致我相信一些布局和舞台设置与Mac电脑兼容它后,我裹在主场景只发生一次,有没有人遇到此问题或不知道如何解决它?

+0

非常好的问题! – Milan

+0

实际的布局代码是用Java编写的,所以它应该做的任何系统(至少如果系统运行相同的JDK版本)同样的事情。该'Screen' API('Screen.getPrimary()'和'screen.getVisualBounds()')显然必须与本地系统进行通信,并可能做一些坐标变换。你能记录你在不同系统上屏幕边界获得的值吗?每个系统运行哪个JDK版本?在Mac上,一些较早的JDK版本有将本地屏幕坐标转换为JavaFX使用的坐标系的错误。 –

回答

1

当设定值的阶段,你应该:

//Initialize Group root for Main Node 
    Group root = new Group(); 

    //Initialize Scene on group root with specific sizes 
    Scene scene = new Scene(root, 450, 250); 

    //Initialize BorderPane and Bind the layout with the scene size. 
    BorderPane borderPane = new BorderPane(); 
    borderPane.prefHeightProperty().bind(scene.heightProperty()); 
    borderPane.prefWidthProperty().bind(scene.widthProperty()); 

    //Set the TabPane to be centered 
    borderPane.setCenter(tabPane); 

    //Adds Layout to Main Node 
    root.getChildren().add(borderPane); 

这会自动根据屏幕的旁边所有控件的分辨率改变窗口大小。因此,允许您使JavaFX与所有操作系统兼容。

GoodLuck。让我知道你是否想要进一步的帮助。 :)

+0

完美的作品!谢谢 – Philayyy