JavaFX/如何在启动时加载/填充值



我今天刚开始使用JavaFX,已经需要一些建议了。我使用MainApplication的start(Stage ...)方法中的FXMLLoader加载applicaton.fxml(使用Oracle SceneBuiler创建)(在我的application.fxml文件中指定了ApplicationController)。

<AnchorPane id="AnchorPane" disable="false" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="800.0" styleClass="theme" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="app.AppController">
...more code here...
<ComboBox id="cmb_locations" fx:id="cmb_locations">
    <items>
        <FXCollections fx:factory="observableArrayList">
            <String fx:value="Item 1" />
            <String fx:value="Item 2" />
            <String fx:value="Item 3" />
        </FXCollections>
    </items>
</ComboBox>

现在,我在applicaton.fxml中有一个ComboBox,它有三个项(默认项)。我需要的是在启动期间用我自己的值填充ComboBox。有人知道如何实现这一点,以及将相关的代码片段(app.AppController或类似的东西)放在哪里吗?提前谢谢。

您有一些用于fxml文件的控制器。在那里您可以访问您的组合框。您可以将此代码放入元素的设置列表中(可能在initialize()方法中):

如果你真的不想编辑你的fxml文件,你可以先用cmb_locations.getItems().clear();清除列表,然后再设置新列表。

public class ApplicationController implements Initializable {
    @FXML
    ComboBox cmb_locations;
    ...
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        ...
        List<String> list = new ArrayList<String>();
        list.add("Item A");
        list.add("Item B");
        list.add("Item C");
        ObservableList obList = FXCollections.observableList(list);
        cmb_locations.getItems().clear();
        cmb_locations.setItems(obList);
        ...
    }
}

首先删除FXML"项目1"项目2"上的默认值。。。只是为了拥有

<FXCollections fx:factory="observableArrayList">
    </FXCollections>

在你的控制器上,如果你想取回你的combobox,你必须通过注入它

@FXML
ComboBox cmb_locations
public void initialize(URL url, ResourceBundle resource) {
//here populate your combobox
}

在控制器中,您可以实现Initializable接口。然后在initialize方法中,只需添加代码即可加载组合框。

最新更新