首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFx HBox移除间距

JavaFx HBox移除间距
EN

Stack Overflow用户
提问于 2021-07-24 18:27:31
回答 1查看 327关注 0票数 1

我到目前为止有什么

我试图用javaFx实现一个多行的javaFx,它能够显示表情符号,我使用了VBox of FlowPanes (每一行都有一个FlowPane ),用空格分隔成文字,单词显示在HBox中,HBox将包含文本的文本节点和表情符号的ImageView,当前的设置在下面的图像中描述。

下面的截图显示了我到目前为止的情况。

问题所在

我所面临的问题是复杂的单词,当多个表情符号(ImageViews)显示在一个HBox中时,卡雷特位置估计将对每幅图像错误半像素(因为我假设HBox的宽度将等于其子HBox的fitWidths之和?,但它不是),就好像HBox有某种间距,尽管间距属性设置为0。

如果同时显示许多表情符号,效果会变得更糟,如下面的屏幕截图所示

它也不是填充,或边界,任何帮助都会感谢,我很抱歉,对冗长乏味的解释,我不得不加上它,如果它可以帮助我解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-24 23:02:23

经过大量调查,结果发现这是由于我将子fitWidth的ImageViews设置为十进制值(非整数),ImageView接受一个双值作为fitWidth,但在呈现时它似乎是四舍五入到最近的大整数,调用getFitWidth()方法仍然会返回您设置的双值,但是父方法会用四舍五入的值显示它们(因为我猜物理像素不能显示半像素,对吗?)

因此,只有当getWidth() ( ImageViews的fitWidths )是非整数的情况下,才会返回比子ImageViews 的fitWidths之和更大的值。

这可以使用下面的代码进行测试

代码语言:javascript
复制
ArrayList<Image> images = new ArrayList<Image>();

//Fill the list with N images

StackPane root = new StackPane();
root.setPadding(new Insets(15));

HBox parent = new HBox(0);
for (Image image : images) {
    ImageView view = new ImageView(image);
    view.setPreserveRatio(true);
    view.setFitWidth(fitWidth);
    parent.getChildren().add(view);
}

root.getChildren().add(parent);

ps.setOnShown(event -> {
    double sum = 0;
    for (Node node : parent.getChildren()) {
        sum += ((ImageView) node).getFitWidth();
    }
    System.out.println("fitWidth : " + fitWidth);
    System.out.println("Sum of fitWidths of child ImageViews : " + sum);
    System.out.println("Width of the parent HBox : " + parent.getWidth());
});

ps.setScene(new Scene(root));
ps.show();

在fitWidth为31.5和32.0的情况下运行此程序将得到以下结果

代码语言:javascript
复制
fitWidth : 31.5
Sum of fitWidths of child ImageViews : 315.0
Width of the parent HBox : 320.0

fitWidth : 32.0
Sum of fitWidths of child ImageViews : 320.0
Width of the parent HBox : 320.0

注意,父级的宽度是相同的,但是fitWidths的和不是,因为在布局或呈现过程中,值是在某个点舍入的,这导致了问题中所描述的问题。

解决这个问题会因上下文而异,我通过在设置fitWidth时将double转换为int来解决这个问题,但这确实取决于开发人员。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68512753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档