如何使用FXML将项添加到ComboBox(或其他控件)?

Bra*_*rek 2 controls javafx fxml

最近,我发现<ComboBox>- 和其他控件 - 可以<items>在它们下面有一个元素.

如何在FXML标记中填充或添加项目到控件?

(一个用例可能是将FXML作为模型展示给利益相关者.)

Bra*_*rek 8

研究证明它是通过组合fx:valuefx:factory属性完成的.这些似乎已被添加JavaFX 8 JavaFX 2.

请注意,正如@fabian所做的那样,这样做会打破模型视图之间的分离- 从长远来看,这可能是一个不受欢迎的结果.

外汇:值

fx:value属性可用于初始化没有默认构造函数但提供静态valueOf(String)方法的类型的实例.例如,java.lang.String以及每个原始包装器类型定义了一个valueOf()方法,并且可以在FXML中构造如下:

<String fx:value="Hello, World!"/>
<Double fx:value="1.0"/>
<Boolean fx:value="false"/>
Run Code Online (Sandbox Code Playgroud)

定义静态valueOf(String)方法的自定义类也可以这种方式构造.


外汇:工厂

fx:factory属性是创建其类没有默认构造函数的对象的另一种方法.该属性的值是用于生成类实例的静态,无arg工厂方法的名称.例如,以下标记创建一个可观察数组列表的实例,并填充三个字符串值:

<FXCollections fx:factory="observableArrayList">
    <String fx:value="A"/>
    <String fx:value="B"/>
    <String fx:value="C"/>
</FXCollections>
Run Code Online (Sandbox Code Playgroud)

一些例子:

组合框

<ComboBox value="One">
    <items>
        <FXCollections fx:factory="observableArrayList">
            <String fx:value="Three"/>
            <String fx:value="Two"/>
            <String fx:value="One"/>
        </FXCollections>
    </items>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)

FXML中的ComboBox具有默认值

CheckComboBox

ControlsFX控件有一点不同:

<CheckComboBox>
    <items>
        <String fx:value="One"/>
        <String fx:value="Two"/>
        <String fx:value="Three"/>
    </items>
</CheckComboBox>
Run Code Online (Sandbox Code Playgroud)

checkcombobox

的TableView

TableView变得有点复杂,因为它需要CellValueFactory知道要在每列中显示Person的哪个部分.

<TableView prefHeight="200.0" prefWidth="200.0">
    <columns>
     <TableColumn text="Name">
        <cellValueFactory>
            <PropertyValueFactory property="name" />
        </cellValueFactory>
     </TableColumn>
     <TableColumn text="Comment">
        <cellValueFactory>
            <PropertyValueFactory property="comment" />
        </cellValueFactory>
     </TableColumn>
    </columns>  
    <items>
        <FXCollections fx:factory="observableArrayList">
            <Person name="Jacob" comment="Hey!"/>
            <Person name="Isabella" comment="Dude, we're in FXML!"/>
            <Person name="Ethan" comment="No way!"/>
        </FXCollections>
    </items>
</TableView>
Run Code Online (Sandbox Code Playgroud)

FXML中的TableView