【发布时间】:2017-02-07 10:35:20
【问题描述】:
在构建这个应用程序时遇到了几次这个问题,现在确实阻碍了我们的功能。当我更改影响舞台的一行代码时,我的其他开发人员(使用 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用户登录后,舞台会改为最小化为左下角的一个小窗口,然后消失。我添加的新内容现在也发生了类似的事情。
我做了这个添加是为了在应用程序中加入一个侧边菜单。如您所见,我将整个场景包装在 Stack Pane 中,然后将 Anchor 窗格(参见层次结构)与侧面菜单的外部锚窗格包装在一起。现在完全相同的事情正在发生,它会在两台不同的 Mac 上最小化并消失,Windows 完全没问题。
有些东西让我相信某些布局和舞台设置与 Mac 不兼容,因为它只是在我包裹主要场景后再次发生,有没有人遇到过这个问题或知道如何解决它?
【问题讨论】:
-
非常好的问题!
-
实际的布局代码是用Java编写的,所以它应该在任何系统上做同样的事情(至少如果系统运行相同的JDK版本)。
ScreenAPI(Screen.getPrimary()和screen.getVisualBounds())显然必须与本机系统通信,并可能进行一些坐标转换。您可以记录您在不同系统上获得的屏幕边界值吗?每个系统运行的是哪个 JDK 版本? Mac 上的一些早期 JDK 版本存在将本机屏幕坐标转换为 JavaFX 使用的坐标系的错误。
标签: java layout javafx scenebuilder