我在使用JavaFX(8)、HBox、ComboBox和HGrow时遇到了问题。
HGrow在与ComboBox结合使用时无法正常工作。
(提示:如果使用TextField而不是ComboBox,则可以按预期工作!)
这是我的FXML代码:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<VBox prefHeight="117.0" prefWidth="285.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.test.TestController">
<children>
<HBox prefHeight="105.0" prefWidth="196.0" VBox.vgrow="ALWAYS">
<children>
<ComboBox fx:id="fxCboTest" prefHeight="25.0" prefWidth="62.0" HBox.hgrow="ALWAYS" />
</children>
</HBox>
</children>
</VBox>
这段代码将会产生以下结果:
我也尝试了下面的代码(但没有成功,这段代码不会有任何作用):
HBox.setHgrow(uiController.fxCboTest, Priority.ALWAYS);
有没有人知道如何使ComboBox水平伸展?
hgrow
不会覆盖可调整大小节点的最大宽度,默认情况下设置为首选大小。关于这个问题在tutorial中提供了一些信息,也可以在Parleys的优秀演示(需要注册)中找到更多资料。 - James_DmaxWidth
默认值都为特殊值Region.COMPUTED_SIZE
,这将导致调用computeMaxWidth(...)
。对于控件,这会将任务委托给皮肤实现。深入源代码,ComboBoxBaseSkin
通过返回首选宽度来解决此问题;TextFieldSkin
只是继承了默认的SkinBase
实现,返回Double.MAX_VALUE
。因此,默认情况下,组合框仅限于其首选大小;文本字段则允许无限增长。底线是它们具有不同的默认值。 - James_DmaxWidth="Infinity"
,这在fxml中看起来更好。 - tomorrow