我試圖動態添加條目到JavaFX菜單。我有一個可以繪製圖形的程序,每次繪製新圖形時,我都會在所有圖形中添加一個條目到ObservableList
。
我的controller
觀察列表,並且在每次更改時,都應該修改中的Menu
。不過,我這樣做時遇到問題。
在第一次添加時,它按預期方式顯示the first entry
。
第二次添加時,該列表包含the first entry + the first entry + the last entry
。
第三次添加時顯示first entry + the first entry + the second entry + the first entry + the second entry + the last entry
。我想你可以從這個角度猜測這個模式。
這段代碼是從我的控制採取:將動態條目添加到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
});
}
});
我的方法是空的每一個變化的Menu
和填充它,但它似乎並沒有工作。有人有一個想法我失蹤了嗎?
{ [[email protected]] added at 0 }
{ [[email protected]] added at 1 }
{ [[email protected]] added at 2 }
輸出顯示了我期待看到的內容。 ObservableList
的size()
正如我所期待的那樣。
一旦嘗試傳遞'graphHandler.getGraphs()'作爲參數,就無法工作。感謝您的解決方案:) –