I am working in a JavaFX project. There I have fxml included in other fxml files. Now I need to send data from the outer controller to the inner controller. I’ve tried it, but the combobox looses its items as soon as the transferMethod finished.
Outer Controller:
public class AbfragenController {
private EFController efControllerModul;
private ArrayList<KQ> kqList;
private ArrayList<DLS> dlsList;
private ArrayList<PDI> pdiList;
private ArrayList<Hauptbeschwerden> hauptbeschwerdenList;
private ArrayList<DlsProtocols> dlsProtocolsList;
public void initialize() {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/at/palberon/miniproqa/miniproqa/moduls/abfragenUImoduls/EF.fxml"));
Node efNode = loader.load(); // This loads the FXML and initializes the controller
efControllerModul = loader.getController(); // This retrieves the controller instance
// Setzen der Ereignisbehandler für Änderungen im inneren Controller
setInnerControllerEventHandlers();;
//<editor-fold defaultstate="collapsed" desc="Imports">
Import importData = new Import();
kqList = importData.getKqList();
dlsList = importData.getDlsList();
pdiList = importData.getPdiList();
hauptbeschwerdenList = importData.getHauptbeschwerdenList();
dlsProtocolsList = importData.getDlsProtocolsList();
//</editor-fold>
// Setzen der Daten für die inneren Controller
System.out.println("Setting data for EFController");
for (Hauptbeschwerden hauptbeschwerden : hauptbeschwerdenList) {
System.out.println(hauptbeschwerden.getHauptbeschwerdeName());
}
efControllerModul.setListHBComboBox(hauptbeschwerdenList);
} catch (Exception e) {
e.printStackTrace();
}
}
Inner Controller:
public class EFController {
@FXML
private Text efTextBreathing;
@FXML
private ChoiceBox<String> efChoiceBoxBreathing;
private ObservableList<String> hbObservableList;
public void initialize() {
breathingPatInputChanged();
hbObservableList = FXCollections.observableArrayList();
System.out.println("EFController initialized");
}
public void breathingPatInputChanged() {
efChoiceBoxBreathing.valueProperty().addListener((observable, oldValue, newValue) -> {
System.out.println(efComboBoxHB.getItems());
System.out.println(hbObservableList);
efComboBoxHB.setItems(hbObservableList);
efComboBoxHB.setDisable(false);
efComboBoxHB.requestFocus();
efComboBoxHB.show();
System.out.println(efComboBoxHB.getItems());
});
}
public void setListHBComboBox(ArrayList<Hauptbeschwerden> hauptbeschwerdenList) {
List<String> hbStringList = hauptbeschwerdenList.stream()
.map(Hauptbeschwerden::getHauptbeschwerdeName)
.collect(Collectors.toList());
hbObservableList.setAll(hbStringList); // Using setAll to directly replace the content
System.out.println("hbStringList: " + hbStringList);
System.out.println("hbObservableList: " + hbObservableList);
efComboBoxHB.setItems(hbObservableList);
System.out.println("efComboBoxHB items: " + efComboBoxHB.getItems());
if (hbObservableList.isEmpty()) {
System.out.println("ObservableList for ComboBox is empty.");
} else {
System.out.println("ComboBox items set successfully.");
}
}
}
Console Output when running:
EFController initialized
EFController initialized
Setting data for EFController
01 - Bauchschmerzen/-beschwerden
31 - Bewusstlosigkeit/Ohnmacht (Beinahe-)
hbStringList: [01 - Bauchschmerzen/-beschwerden, 31 - Bewusstlosigkeit/Ohnmacht (Beinahe-)]
hbObservableList: [01 - Bauchschmerzen/-beschwerden, 31 - Bewusstlosigkeit/Ohnmacht (Beinahe-)]
efComboBoxHB items: [01 - Bauchschmerzen/-beschwerden, 31 - Bewusstlosigkeit/Ohnmacht (Beinahe-)]
ComboBox items set successfully.
[]
[]
[]
Both codes are shortned by me, but there should be everything that ist relvant.