显然有两种方法getWidth
和getHeight
但如果我们只更改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
就是这样:
在文字更改和背景调整之后,我的Label
就是这样:
我看了一下这篇文章,但它推荐了一种弃用的方法:
答案 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());