Bir JavaFX menüsüne dinamik olarak girişler eklemeye çalışıyorum. Grafik çizebilen bir programım var, her yeni bir grafik çizildiğinde, tüm grafiklerle bir ObservableList
'a bir giriş ekliyorum.
Benim controller
benim liste ve her değişiklik, JavaFX view
içinde Menu
değiştirmelidir. Ancak bunu yaparken bir sorunla karşılaşıyorum.
İlk eklentide, beklendiği gibi the first entry
gösterir.
İkinci eklentide, liste the first entry + the first entry + the last entry
içerir.
Üçüncü eklentide, first entry + the first entry + the second entry + the first entry + the second entry + the last entry
gösterilmektedir. Kalıbı bu noktadan ileriye doğru tahmin edebilirsiniz.JavaFX'te Menü'ye dinamik girişler ekleme
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
});
}
});
Benim yaklaşımım o her değişikliği Menu
boşaltmak ve doldurmak için, ama çalışmak için görünmüyor:
Bu kod parçacığı benim denetleyicisi alınır. Kaybettiğim bir fikri olan var mı?
{ [[email protected]] added at 0 }
{ [[email protected]] added at 1 }
{ [[email protected]] added at 2 }
çıkış
görmeyi bekliyorum neyi gösterir. Ayrıca ObservableList
'un size()
'u beklediğim gibi.
Bir kez argüman olarak "graphHandler.getGraphs()" geçmeye çalıştı, işe yaramadı. Çözüm için teşekkürler :) –