JavaFX的:如何显示之前获得标签的宽度是多少?

问题描述 投票:0回答:1

在我的JavaFX应用程序,用户登录和应用程序检索有关的用户数据。数据的一块是他们公司的名字。应用程序必须调整文本保持Label的宽度。

我有一个textProperty()听者,其调节一个TextField内的Label的字体大小。宽度功能的工作原理。不管公司名称的长度,它适合。然而,较小的文本squishes了接近Ÿ像这样的Label坐标:

enter image description here enter image description here接壤的重点。顶部是什么样子时,它适用于宽度等。底部正确地调整大小的字体,但不调整在y坐标相应。

所以,我有两个想法,我不知道该怎么办无论是。

  • 找到一种方法,有setLayoutY()设置Label的垂直中心,而不是Label的顶部,以保持垂直居中无论大小。
  • 使用setLayoutY()调整基于新的字体大小Label的y坐标。这里的问题是,我不知道如何让我的文字的宽度之前,我显示出来,所以在下面我的代码,labelHeight相同labelHeight与默认的字体,因为它尚未使用。
// 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-interface javafx label dynamic-ui
1个回答
0
投票

我怀疑别人犯同样的错误。我曾试图改变定位前CENTER_LEFT,但它并没有为我工作,因为我有我的高度设置为自动计算的高度。如果你有一个设定的高度,这将正常工作。我已经得出结论,我必须新空房禁地。

© www.soinside.com 2019 - 2024. All rights reserved.