【问题标题】:How can I get the width and the height of a JavaFX Label?如何获取 JavaFX 标签的宽度和高度?
【发布时间】:2016-10-31 23:41:17
【问题描述】:

显然有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是这样的:

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

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

How to get label.getWidth() in javafx

【问题讨论】:

标签: java javafx resize label


【解决方案1】:

在设置textProperty的那一刻,标签实际上没有在GUI上更新,因此返回“旧”大小的原因,因此大小没有改变。

您可以在监听器中收听LabelwidthPropertyheightProperty 并调整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 - 你可以检查这个问题:FXML StackPane doesn't align children correctly

【讨论】:

  • “标签没有 setWidth 方法” -> 抱歉,我忘记了一些代码声明。您的解决方案效果很好,谢谢:backgroundLabel.widthProperty().bind(speedLabel.widthProperty()); backgroundLabel.heightProperty().bind(speedLabel.heightProperty()); 但是我可以在标签宽度处添加边距吗?
  • 我只是假设另一个控件是Label 也是因为它的名字。现在有了更新,我可以看到它的 Rectangle -> 答案已更新。关于边距:现在随着您的问题更新,我可以看到您想要实现的目标。请参阅更新答案的结尾。
【解决方案2】:

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

方法一: 将标签的背景颜色设为矩形。这样无论Label's 的大小是多少,您的背景矩形都会相应地采用宽度。

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

方法二: 根据您的标签大小绑定矩形的大小

rectangle.prefWidthProperty(label.widthProperty());
rectangle.prefHeightProperty(label.heightProperty());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 2014-01-26
    • 2011-07-12
    • 2014-05-01
    • 1970-01-01
    • 2019-12-26
    相关资源
    最近更新 更多