JavaFX - 如何制作ComboBox hgrow?

时间:2015-04-07 10:55:42

标签: combobox javafx javafx-8


我有JavaFX(8),HBox,ComboBox和HGrow的问题。 HGrow不能与ComboBox结合使用。

(INFO:使用 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>

此代码将导致:

enter image description here

我也试过以下代码(没有成功,这段代码什么也没做):

HBox.setHgrow(uiController.fxCboTest, Priority.ALWAYS);

有没有人知道如何制作ComboBox HGrow?

3 个答案:

答案 0 :(得分:21)

这是我自己的问题的答案 经过一些测试后,我发现在将最大宽度设置为 MAX_VALUE 时,它可以正常工作:

enter image description here

这将导致来自SceneBuilder的以下代码/ xml:

...
<children>
   <ComboBox maxWidth="1.7976931348623157E308" prefWidth="150.0" HBox.hgrow="ALWAYS" />
</children>
...

其中 1.7976931348623157E308 看起来像Double.MAX_VALUE。

这也适用于Hbox中的多个控件 enter image description here

在我看来,这并非因此/始终如一 我仍然不知道为什么HGrow不能用于ComboBox。

答案 1 :(得分:1)

这是一个黑客,但它应该工作。在控制器的初始化方法中,定义绑定。

@Override
public void initialize(URL location, ResourceBundle resources) {
    fxCboTest.prefWidthProperty().bind(hbox.widthProperty());
}

答案 2 :(得分:1)

我遇到了同样的问题,但是我没有使用Scene Builder
因此,基于Ben's answer的修复是在以下代码中:

ComboBox comboBox = new ComboBox(...);
...
comboBox.setMaxWidth(Double.MAX_VALUE);