JavaFX - 如何使 ComboBox hgrow?
JavaFX - How to make ComboBox hgrow?
我对 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 吗?
这是一个 hack,但它应该有效。在控制器的初始化方法中,定义一个绑定。
@Override
public void initialize(URL location, ResourceBundle resources) {
fxCboTest.prefWidthProperty().bind(hbox.widthProperty());
}
这是对我自己问题的回答。
经过一些测试,我发现当将 Max Width 设置为 MAX_VALUE 时,它有效:
这将导致以下来自 SceneBuilder 的 code/xml:
...
<children>
<ComboBox maxWidth="1.7976931348623157E308" prefWidth="150.0" HBox.hgrow="ALWAYS" />
</children>
...
其中 1.7976931348623157E308 看起来像 Double.MAX_VALUE.
这也适用于 Hbox 中的多个控件。
在我看来,这不是很consequently/consistently。
我仍然不明白为什么 HGrow 不适用于 ComboBox。
我遇到了同样的问题,但我没有使用 Scene Builder
。
所以我的修复基于 Ben's answer,在下面的代码中:
ComboBox comboBox = new ComboBox(...);
...
comboBox.setMaxWidth(Double.MAX_VALUE);
我对 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 吗?
这是一个 hack,但它应该有效。在控制器的初始化方法中,定义一个绑定。
@Override
public void initialize(URL location, ResourceBundle resources) {
fxCboTest.prefWidthProperty().bind(hbox.widthProperty());
}
这是对我自己问题的回答。
经过一些测试,我发现当将 Max Width 设置为 MAX_VALUE 时,它有效:
这将导致以下来自 SceneBuilder 的 code/xml:
...
<children>
<ComboBox maxWidth="1.7976931348623157E308" prefWidth="150.0" HBox.hgrow="ALWAYS" />
</children>
...
其中 1.7976931348623157E308 看起来像 Double.MAX_VALUE.
这也适用于 Hbox 中的多个控件。
在我看来,这不是很consequently/consistently。
我仍然不明白为什么 HGrow 不适用于 ComboBox。
我遇到了同样的问题,但我没有使用 Scene Builder
。
所以我的修复基于 Ben's answer,在下面的代码中:
ComboBox comboBox = new ComboBox(...);
...
comboBox.setMaxWidth(Double.MAX_VALUE);