我刚开始使用JavaFX并且已经需要一些建议。我使用MainApplication的applicaton.fxml
方法中的FXMLLoader加载了start(Stage ...)
(使用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>
现在,ComboBox
中有applicaton.fxml
,其中有三项(默认项)。我需要的是在启动期间使用我自己的值填充ComboBox
。有谁知道如何实现这一点以及在何处放置相关的代码片段(app.AppController
或类似的东西)?提前谢谢。
答案 0 :(得分:7)
你有一些控制器为你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);
...
}
}
答案 1 :(得分:4)
首先删除FXML“第1项”“第2项”的默认值... 只是为了
<FXCollections fx:factory="observableArrayList">
</FXCollections>
并且在你的控制器上,如果你想要检索你的组合框,你必须通过
注入它@FXML
ComboBox cmb_locations
public void initialize(URL url, ResourceBundle resource) {
//here populate your combobox
}
答案 2 :(得分:3)
在控制器中,实现Initializable接口。 然后在initialize方法中,只需添加代码即可加载组合框。