java - 如何获取 JavaFX 标签的宽度和高度?

标签 java javafx resize label

显然有两个方法getWidthgetHeight,但如果我们只是更改Label文本值,它们会返回旧的标签​​大小。

例如,在此代码中,背景大小未正确调整:

Label speedLabel = new Label();
Rectangle backgroundLabel = new Rectangle();

// Some initialization

// Change the label text
speedLabel.setText(connection.getSpeed_bps()); // Sets a bigger number

// Adjust the background
backgroundLabel.setWidth(speedLabel.getWidth());
backgroundLabel.setHeight(speedLabel.getHeight());

初始化后,我的Label是这样的:

enter image description here

经过文字更改和背景调整后,我的Label是这样的:

enter image description here

我看过这篇文章,但它推荐了一种已弃用的方法:

How to get label.getWidth() in javafx

最佳答案

返回“旧”尺寸的原因是,当您设置标签的 textProperty 时,标签实际上并未在 GUI 上更新,因此尺寸不会更改。

您可以监听LabelwidthPropertyheightProperty并在监听器中调整Rectangle的大小:

speedLabel.widthProperty().addListener((obs, oldVal, newVal) -> {
    backgroundLabel.setWidth(newVal.doubleValue());
});

speedLabel.heightProperty().addListener((obs, oldVal, newVal) -> {
    backgroundLabel.setHeight(newVal.doubleValue());
});

或者简单地使用属性之间的绑定(bind):

backgroundLabel.heightProperty().bind(speedLabel.heightProperty());
backgroundLabel.widthProperty().bind(speedLabel.widthProperty());

但是如果你只是想实现一个带有一些背景的Label,你实际上不需要一个Rectangle,只需要一些CSS - 你可以检查这个问题:FXML StackPane doesn't align children correctly

关于java - 如何获取 JavaFX 标签的宽度和高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38096641/

相关文章:

java - Android MediaPlayer错误

java - Camel -redis : why does this not print to the console?

java - 如何在 mac 安装程序的 java 中更改安装程序的 java 默认图标

jquery - 调整父菜单jquery的大小?

java - Spring Data JPA - 命名查询忽略空参数

java - Java中输出文件中XML属性的控制顺序

java - Vbox 内的 Hbox

如果所有者最小化,则 Javafx 对话框(警报)不可见

java - gridbaglayout 的组件能否在调整大小时填充父框架?

c# - 可以快速调整大小的数组