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

nyy*_*kki 4 javafx javafx-2

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

<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>
Run Code Online (Sandbox Code Playgroud)

现在,我有一个ComboBoxapplicaton.fxml,其中有三个项目(默认项).我需要的是ComboBox在启动期间使用我自己的值填充它.有谁知道如何实现这一点以及在何处放置相关的代码片段(app.AppController或类似的东西)?提前致谢.

fly*_*yer 8

你有一些控制器为你fxml文件.在那里你可以访问你的ComboBox.您可以将此代码设置为元素列表(可能在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);
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)