4

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

<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>

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

4

3 回答 3

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);
        ...
    }
}
于 2013-08-21T15:35:14.543 回答
4

首先删除 FXML "Item 1" "Item 2" 上的默认值......只是为了

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

在你的控制器上,如果你想检索你的组合框,你必须通过这样做来注入它

@FXML
ComboBox cmb_locations

public void initialize(URL url, ResourceBundle resource) {
//here populate your combobox
}
于 2013-08-21T15:30:17.907 回答
3

在您的控制器中,您实现 Initializable 接口。然后在初始化方法中,您只需添加代码来加载您的组合框。

于 2013-08-21T15:23:01.987 回答