首页 > 解决方案 > JavaFX:如何在显示前获取标签的宽度?

问题描述

在我的 JavaFX 应用程序中,用户登录并且应用程序检索有关用户的数据。一项数据是他们的公司名称。应用程序必须调整文本以保持Label.

我有一个textProperty()侦听器,可以调整 aTextField内 a的字体大小Label。宽度功能有效。无论公司名称的长度如何,它都适合。但是,较小的文本会更靠近Label类似的 y 坐标,因此:

在此处输入图像描述 在此处输入图像描述 镶边以示强调。顶部是它适合宽度时的样子。底部正确调整字体大小,但不会相应地调整 y 坐标。

所以,我有两个想法,我也不知道该怎么做。

// Resizes text to fit name lengths
companyNameLabel.textProperty().addListener((observable, oldValue, newValue) -> {

    Text tmpText = new Text(newValue);
    tmpText.setFont(Font.font("Oxygen", 72));

    double textWidth = tmpText.getLayoutBounds().getWidth();

    // Check if text width is greater than maximum width
    if (textWidth > 470) {

        // Change font size to fit within 470
        double newFontSize = 72 * 470 / textWidth;
        companyNameLabel.setFont(Font.font("Oxygen", newFontSize));

        // Finds y value for vertical centering
        double labelHeight = companyNameLabel.getHeight();
        System.out.println(labelHeight);
        companyNameLabel.setLayoutY(155 - labelHeight / 2);

    }
});

谢谢。

标签: user-interfacejavafxlabel

解决方案


我怀疑其他人也犯了同样的错误。我曾尝试将定位更改为CENTER_LEFT之前,但它对我不起作用,因为我将高度设置为自动计算高度。如果你有一个设定的高度,这会很好。我已经得出结论,我一定是脑死亡。


推荐阅读