【问题标题】:Buttons in Hbox uneven width with hgrow when distributed width can't be a whole number当分布宽度不能为整数时,Hbox中的按钮宽度不均匀,hgrow
【发布时间】:2020-10-23 20:35:11
【问题描述】:

我想要一个 HBox 容器,其中包含 3 个宽度均匀的按钮,但是当父级的宽度不能分成整数部分时,其中一个节点会更少。如果我的 HBox 是 245px,我有 3 个按钮,其中 1 个是 81px,其他是 82px。

问题是在 HBox 顶部我有一个加载圆圈指示器,圆圈位于 HBox 的中心,当中间按钮未居中时,加载圆圈在 HBox 顶部看起来也未居中。

    HBox root = new HBox();
    root.setFillHeight(true);
    for (int i = 0; i < 3; i++) {
        AnchorPane pane = new AnchorPane();
        HBox.setHgrow(pane, Priority.ALWAYS);
        pane.setMaxHeight(Double.MAX_VALUE);
        root.getChildren().add(pane);
    }
    Scene scene = new Scene(root, 245, 50, Color.TRANSPARENT);
    primaryStage.setScene(scene);
    primaryStage.initStyle(StageStyle.TRANSPARENT);
    primaryStage.show();

    root.getChildren().forEach(node -> {
        AnchorPane pane = ((AnchorPane)node);
        System.out.println(pane.getWidth());
    });

想法是它是一个登录场景,提交用户名和密码后,服务器正在加载,hbox顶部有一个圆圈ProgressIndicator,圆圈居中。

中间按钮上方的圆圈看起来没有居中。那么如何在不明确设置按钮宽度的情况下使用布局容器来做到这一点。布局是否总是在整数上分配孩子?

【问题讨论】:

    标签: java javafx


    【解决方案1】:

    所以经过一些属性测试后,我发现 snapToPixel=false 是可行的方法。

    来自关于 snapToPixel https://docs.oracle.com/javase/8/javafx/api/javafx/scene/layout/Region.html 的 oracle 文档

    定义此区域是否将其子区域的位置、间距和大小值调整为像素边界。这默认为 true,这通常是为了获得清晰的用户界面而预期的行为。值 false 将允许分数对齐,这可能会导致“模糊”的边框。

    我尝试了不同的像素,在我的情况下它可以很好地处理边缘。

    同样没有触及 snapToPixel,我发现 GridPane 具有 33.3% 的列宽,将 81px 按钮放在中间,其中 hbox 是最后一个孩子,所以 GridPane 也适用于我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 2012-09-29
      • 2016-05-02
      • 2019-09-26
      • 1970-01-01
      • 2012-06-26
      相关资源
      最近更新 更多