【发布时间】:2017-08-28 19:51:36
【问题描述】:
(我正在使用 Scene Builder)在我的控制器类中,我有一个组合框,当我打开一个新窗口并用新项目填充框内的列表时,当我关闭该窗口时,我需要更改组合框,但是因为它不能是静态的,所以我想不出办法。
第一个窗口的控制器类(相关部分)
public void initialize(URL location, ResourceBundle resources) {
readCharacters();
for (Character character : characterList) {
System.out.println(character);
}
characterBox.setValue("Chars");
characterList.sort(Comparator.comparing(Character::getPowerLevel).reversed());
characterBox.setItems(FXCollections.observableArrayList(characterList));
}
public void addNewWindow() throws IOException {
try {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("newWindow.fxml"));
Parent root1 = (Parent) fxmlLoader.load();
Stage stage = new Stage();
stage.setScene(new Scene(root1));
stage.show();
} catch (Exception e) {
e.printStackTrace();
}
}
到目前为止一切都很好,当我在下一个窗口中按下添加按钮时,它将从 Controller2 类执行:
public void addNewCharacter() {
if (addNameField.getText().equals("") || xField.getText().equals("") || pField.getText().equals("")) {
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("Error");
alert.setHeaderText(null);
alert.setContentText("Please fill all fields");
alert.showAndWait();
} else {
Controller.characterList.add(new Character(addNameField.getText(), Double.parseDouble(xField.getText()), Double.parseDouble(pField.getText()), specialButton.isSelected()));
Controller.writeCharacters(); //this writes the characterList to a file for when i reopen the programm
}
}
现在的问题是,当我完成后,原始窗口上的组合框不会重新加载新条目,我需要重新打开程序才能使用新条目对其进行更新。那么我该如何解决这个问题,显然我无法将 FXML 字段设为静态。所以我想不出一种方法将数据从Controller2发送到ComboBox到Controller。除了在第一个窗口中制作重新加载按钮之外,我还需要一个解决方案。
【问题讨论】:
标签: java fxml scenebuilder