显然有两个方法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
是这样的:
我看过这篇文章,但它推荐了一种已弃用的方法:
最佳答案
返回“旧”尺寸的原因是,当您设置标签的 textProperty
时,标签实际上并未在 GUI 上更新,因此尺寸不会更改。
您可以监听Label
的widthProperty和heightProperty并在监听器中调整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/