JavaFX问题:HBox.setHgrow未生效,标签无法占满横向空间并居右
问题
运行以下Kotlin代码后,标签“Label”并未显示在应用窗口右侧,且HBox.setHgrow未让标签获取全部可用横向空间,请问问题出在哪里?
package com.example.javafxwindow import javafx.application.Application import javafx.geometry.Pos import javafx.scene.Scene import javafx.scene.control.Label import javafx.scene.layout.HBox import javafx.scene.layout.Priority import javafx.stage.Stage class HelloApplication : Application() { override fun start(stage: Stage) { val label = Label("Label") label.alignment = Pos.CENTER_RIGHT HBox.setHgrow(label, Priority.ALWAYS) val hbox = HBox(label) val scene = Scene(hbox, 400.0, 400.0) stage.scene = scene stage.show() } } fun main() { Application.launch(HelloApplication::class.java) }
解答
核心问题在于Label默认不会填充分配给它的可用空间:
HBox.setHgrow(label, Priority.ALWAYS)确实让HBox给Label分配了尽可能多的横向空间,但Label的默认宽度是自适应内容的,不会主动占满这些空间。label.alignment = Pos.CENTER_RIGHT是控制Label内部文本的对齐方式,但只有当Label本身有足够宽度时,这个对齐效果才会显现。
修复方法很简单,给Label设置maxWidth = Double.MAX_VALUE,让它可以扩展到分配到的最大宽度:
package com.example.javafxwindow import javafx.application.Application import javafx.geometry.Pos import javafx.scene.Scene import javafx.scene.control.Label import javafx.scene.layout.HBox import javafx.scene.layout.Priority import javafx.stage.Stage class HelloApplication : Application() { override fun start(stage: Stage) { val label = Label("Label") label.alignment = Pos.CENTER_RIGHT // 允许Label占满分配到的全部宽度 label.maxWidth = Double.MAX_VALUE HBox.setHgrow(label, Priority.ALWAYS) val hbox = HBox(label) val scene = Scene(hbox, 400.0, 400.0) stage.scene = scene stage.show() } } fun main() { Application.launch(HelloApplication::class.java) }
内容的提问来源于stack exchange,提问作者André
相关产品推荐
相关产品推荐

