Ich versuche, Einträge dynamisch zu einem JavaFX-Menü hinzuzufügen. Ich habe ein Programm, das Diagramme zeichnen kann, jedes Mal, wenn ein neues Diagramm gezeichnet wird, füge ich einen Eintrag zu einem ObservableList
mit allen Diagrammen hinzu.
Meine controller
beobachtet die Liste und bei jeder Änderung sollte es die Menu
in der JavaFX view
ändern. Allerdings habe ich ein Problem dabei.
Beim ersten Hinzufügen zeigt es wie erwartet the first entry
.
Beim zweiten Hinzufügen enthält die Liste the first entry + the first entry + the last entry
.
Auf der dritten fügen Sie die first entry + the first entry + the second entry + the first entry + the second entry + the last entry
. Ich schätze, Sie können das Muster von diesem Punkt an erraten.
Dieser Code-Schnipsel aus meinem Controller genommen:Hinzufügen von dynamischen Einträgen zum Menü in JavaFX
graphHandler.getGraphs().addListener(new ListChangeListener<Graph>() {
//GraphHandler.class is my model, that holds the list with all graphs
@Override
public void onChanged(Change<? extends Graph> c) {
Menu history = graphView.getHistoryMenu();
history.getItems().removeAll();
//on change get the Menu from the model and empty it
String changes = (String) c.toString();
System.out.println(changes);
//Output will be added below snippet
graphHandler.getGraphs().forEach((Graph graph) -> {
String root = graph.getRootNode().toString();
MenuItem item = new MenuItem(root);
//Get the graph's root node name and add a MenuItem with it's name
item.setOnAction(new EventHandler<ActionEvent>() {
//On choosing a MenuItem load the according graph; works fine
@Override
public void handle(ActionEvent event) {
graphHandler.getGraphByRootNode(root);
}
});
history.getItems().addAll(item);
//Add all MenuItems to the Menu
});
}
});
Mein Ansatz der Menu
auf jeder Änderung leer war und füllen Sie ihn, aber es scheint nicht zu funktionieren. Hat jemand eine Idee was ich vermisse?
{ [[email protected]] added at 0 }
{ [[email protected]] added at 1 }
{ [[email protected]] added at 2 }
Die Ausgabe zeigt, was zu sehen erwarte ich. Auch die size()
der ObservableList
ist wie ich es erwarte.
Einmal versucht, 'graphHandler.getGraphs()' als Argument zu übergeben, hat nicht funktioniert. Danke für die Lösung :) –