首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX -如何使ComboBox hgrow?

JavaFX -如何使ComboBox hgrow?
EN

Stack Overflow用户
提问于 2015-04-07 10:55:41
回答 3查看 8K关注 0票数 12

我对JavaFX(8)、HBox、ComboBox和HGrow有意见。HGrow不与ComboBox一起工作。

(信息:使用TextField (而不是ComboBox),它按预期工作!)

这是我的FXML代码:

代码语言:javascript
复制
<?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>

该守则将导致:

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

代码语言:javascript
复制
HBox.setHgrow(uiController.fxCboTest, Priority.ALWAYS);

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-07 12:04:55

这是我自己问题的答案。

经过一些测试后,我发现当将最大宽度设置为MAX_VALUE时,它可以工作:

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

代码语言:javascript
复制
...
<children>
   <ComboBox maxWidth="1.7976931348623157E308" prefWidth="150.0" HBox.hgrow="ALWAYS" />
</children>
...

1.7976931348623157E308看起来像Double.MAX_VALUE。

这也适用于Hbox中的多个控件。

在我看来,这不是很consequently/consistently.

我仍然不明白为什么HGrow不适用于ComboBox。

票数 31
EN

Stack Overflow用户

发布于 2015-04-07 11:15:29

这是一次黑客攻击,但应该会成功的。在控制器的intialize方法中,定义一个绑定。

代码语言:javascript
复制
@Override
public void initialize(URL location, ResourceBundle resources) {
    fxCboTest.prefWidthProperty().bind(hbox.widthProperty());
}
票数 2
EN

Stack Overflow用户

发布于 2018-11-26 20:29:38

我也有同样的问题,但我没有使用Scene Builder

因此,我基于Ben's answer的修补程序在下面的代码中:

代码语言:javascript
复制
ComboBox comboBox = new ComboBox(...);
...
comboBox.setMaxWidth(Double.MAX_VALUE);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29489880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档