【问题标题】:Are some JavaFX layouts not compatible with Mac computers?某些 JavaFX 布局是否与 Mac 计算机不兼容?
【发布时间】: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版本)。 Screen API(Screen.getPrimary()screen.getVisualBounds())显然必须与本机系统通信,并可能进行一些坐标转换。您可以记录您在不同系统上获得的屏幕边界值吗?每个系统运行的是哪个 JDK 版本? Mac 上的一些早期 JDK 版本存在将本机屏幕坐标转换为 JavaFX 使用的坐标系的错误。

标签: java layout javafx scenebuilder


【解决方案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 与所有操作系统兼容。

祝你好运。如果您需要任何进一步的帮助,请告诉我。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多