如何根据 JavaFX 8 (8_45) Label 控件项的内容调整其最小宽度?就在此时,我必须手动调整 GUI 组件的大小,以确保无论其父级(例如 HBox、场景、舞台或其他)的大小发生什么情况,它们的内容都是可见的,即:
Label label = new Label("Foo foo foo");
label.setMinWidth(someMinValue);
有没有办法让 Label 或任何其他 JavaFX 控件项“监听”其内容并自动调整其宽度?预先感谢您。
如果您想确保标签对于其所容纳的文本来说足够大,您可能需要设置其最小尺寸以跟踪其首选尺寸:
label.setMinWidth(Region.USE_PREF_SIZE);
这是一个解决方案,您还可以根据未剪辑内容的大小设置最小和最大宽度。
例如,如果您想限制标签可以被剪切的程度以及标签的长度,但否则让标签宽度为显示完整内容所需的精确长度。这里我显示了至少一半的未裁剪宽度和至少 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()
。