如何获得JavaFX标签的宽度和高度?

时间:2016-06-29 10:14:31

标签: 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

2 个答案:

答案 0 :(得分:3)

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

您可以收听Label的{​​{3}}和widthProperty,并在听众中调整Rectangle的大小:

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

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

或仅使用属性之间的绑定:

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

但是,如果您只想获得具有某种背景知识的Label,则实际上并不需要Rectangle,只需要一些CSS - 您可以查看以下问题:heightProperty

答案 1 :(得分:0)

你可以用两种方式做到这一点。

方法1: 将标签的背景颜色设置为矩形。因此,无论Label's大小是什么,您的背景矩形都会相应地取宽度。

label.setStyle("-fx-background-color:grey; -fx-padding:5");

方法2: 根据您的标签尺寸

绑定矩形的大小
rectangle.prefWidthProperty(label.widthProperty());
rectangle.prefHeightProperty(label.heightProperty());