user-interface - JavaFX:如何在显示前获取标签的宽度?
问题描述
在我的 JavaFX 应用程序中,用户登录并且应用程序检索有关用户的数据。一项数据是他们的公司名称。应用程序必须调整文本以保持Label
.
我有一个textProperty()
侦听器,可以调整 aTextField
内 a的字体大小Label
。宽度功能有效。无论公司名称的长度如何,它都适合。但是,较小的文本会更靠近Label
类似的 y 坐标,因此:
镶边以示强调。顶部是它适合宽度时的样子。底部正确调整字体大小,但不会相应地调整 y 坐标。
所以,我有两个想法,我也不知道该怎么做。
- 找到一种方法来
setLayoutY()
设置 的垂直中心Label
,而不是 的顶部Label
,以保持垂直居中而不管大小。 - 用于根据新字体大小
setLayoutY()
调整 y 坐标。Label
这里的问题是我不知道如何在显示之前获取文本的宽度,因此在下面的代码中,它与尚未应用的默认字体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);
}
});
谢谢。
解决方案
我怀疑其他人也犯了同样的错误。我曾尝试将定位更改为CENTER_LEFT
之前,但它对我不起作用,因为我将高度设置为自动计算高度。如果你有一个设定的高度,这会很好。我已经得出结论,我一定是脑死亡。
推荐阅读
- visual-studio - Azure (C#) System.IO.FileNotFoundException:找不到文件
- xen - 无法确定 /sys 是否为挂载点:错误的文件描述符
- python - `and` 和 `or` 语句的意外结果
- javascript - 如何在javascript中添加列
- javascript - 如何在 Ajax 中调用此数据块?
- null - 从 Null 指针加载,为什么这不会使我的程序崩溃?
- google-apps-script - 仅当单元格显示“是”时才获取填充单元格的日期
- python - 如何使用数据集(nd.array)在散点图中对误差条(x 和 y)进行颜色映射?
- python - 将对象 ID 从模板传递到下一个模板的表单
- reactjs - setState 的演示?