我对JavaFX(8),HBox,ComboBox和HGrow有问题。 HGrow不能与ComboBox结合使用。
(INFO:用文本字段(而不是组合框),它按预期工作)JavaFX - 如何制作ComboBox hgrow?
这是我的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);
有没有人有一个想法如何使一个组合框HGrow?
'hgrow'不会覆盖可调整大小的节点的最大宽度,默认情况下会将其设置为首选大小。在[教程](http://docs.oracle.com/javase/8/javafx/layout-tutorial/size_align.htm#JFXLY133)中有一些关于此的信息,同时也是一个很棒的[在Parleys上的演示文稿](https: //www.parleys.com/tutorial/interface-layout-javafx-2-0)(需要注册)。 –
那么,为什么在用XML中的TextField替换ComboBox时会起作用呢? – Ben
在默认设置中挖掘一点。 'maxWidth'默认为两个标记值'Region.COMPUTED_SIZE',这会导致对'computeMaxWidth(...)'的调用。对于控件,这反过来委托给皮肤实现。挖掘源代码,'ComboBoxBaseSkin'通过返回首选宽度来解决这个问题; 'TextFieldSkin'只是继承了默认的'SkinBase'实现,它返回'Double.MAX_VALUE'。因此,默认情况下组合框限于其首选大小;一个文本字段被允许无限增长。底线是他们有不同的默认值。 –