(我正在使用場景生成器)在我的控制器類中,我有一個組合框,當我打開一個新窗口,並用新項目填充框中的列表時,當我關閉那個窗口我需要組合框來改變,但是因爲它不能是靜態的,所以我不能找出一個方法。對於第一個窗口Java FXML需要從另一個窗口重新加載組合框
控制器類(revelant部分)
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();
}
}
打開
直到這裏一切順利,當我在下一個窗口按下添加按鈕t他從控制器2類執行:
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
}
}
現在的問題是,當我做原來的窗口上的ComboBox就不會重新加載新的項目,我需要重新打開該程序爲它與更新新條目。那麼我該如何解決這個問題,顯然我不能讓FXML字段變成靜態的。所以我無法找到一種方法將數據從Controller2發送到ComboBox。我需要一個解決方案,而不是在第一個窗口中創建一個重新加載按鈕。