如何调整Label的宽度以适应其内容?

问题描述 投票:0回答:2

如何根据 JavaFX 8 (8_45) Label 控件项的内容调整其最小宽度?就在此时,我必须手动调整 GUI 组件的大小,以确保无论其父级(例如 HBox、场景、舞台或其他)的大小发生什么情况,它们的内容都是可见的,即:

Label label = new Label("Foo foo foo");
label.setMinWidth(someMinValue);

有没有办法让 Label 或任何其他 JavaFX 控件项“监听”其内容并自动调整其宽度?预先感谢您。

java javafx label
2个回答
16
投票

如果您想确保标签对于其所容纳的文本来说足够大,您可能需要设置其最小尺寸以跟踪其首选尺寸:

label.setMinWidth(Region.USE_PREF_SIZE);

0
投票

这是一个解决方案,您还可以根据未剪辑内容的大小设置最小和最大宽度。

例如,如果您想限制标签可以被剪切的程度以及标签的长度,但否则让标签宽度为显示完整内容所需的精确长度。这里我显示了至少一半的未裁剪宽度和至少 50 像素,但最大 200 像素:

label.minWidthProperty().bind(Bindings.createDoubleBinding(
        () -> Math.max(label.prefWidth(-1) / 2, 50), // Show at least half of content and at least 50px
        label.textProperty(), label.graphicProperty(), label.prefWidthProperty(), label.layoutBoundsProperty()));
label.maxWidthProperty().bind(Bindings.createDoubleBinding(
        () -> Math.min(label.prefWidth(-1), 200), // Show content up to 200px
        label.textProperty(), label.graphicProperty(), label.prefWidthProperty(), label.layoutBoundsProperty()));

这对于标签文本或图形的变化是稳健的。如果您要在渲染标签后更改影响内容大小的其他内容,那么您可能需要将一些其他可观察量添加到依赖项列表中,例如

label.graphicTextGapProperty()

© www.soinside.com 2019 - 2024. All rights reserved.