java - 在 JavaFX 中向菜单添加动态条目

标签 java javafx menu menuitem

我正在尝试向 JavaFX 菜单动态添加条目。我有一个可以绘制图形的程序,每次绘制新图形时,我都会向包含所有图形的 ObservableList 添加一个条目。
我的 Controller 观察列表,并且在每次更改时,它应该修改JavaFX View 中的菜单。但是,我在这样做时遇到了问题。
在第一个添加中,它按预期显示第一个条目
在第二个添加中,列表包含第一个条目 + 第一个条目 + 最后一个条目
在第三个添加上,它显示第一个条目 + 第一个条目 + 第二个条目 + 第一个条目 + 第二个条目 +最后一个条目。我想你可以猜出从现在开始的模式。
此代码片段取 self 的 Controller :

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
        });
    }
});

我的方法是在每次更改时清空菜单并重新填充它,但这似乎不起作用。有人知道我缺少什么吗?

{ [com.example.d3project.model.Graph@7eb5106] added at 0 }
{ [com.example.d3project.model.Graph@f510ff2] added at 1 }
{ [com.example.d3project.model.Graph@69239a8d] added at 2 }

输出显示了我期望看到的内容。 ObservableListsize() 也正如我所期望的那样。

最佳答案

您正在使用removeAll(E...)您需要传递要删除的对象的位置。由于您没有传递任何参数,因此不会删除任何内容。要清除列表,请使用 clear()这将删除历史记录列表中的所有项目。

关于java - 在 JavaFX 中向菜单添加动态条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36149474/

相关文章:

java - 使 JOptionPane 消失

java - 将变量值存储在数组中以查找平均速度

java - 将 JSF 应用程序迁移到 JavaFX

JavaFX 使对象可见但不消耗(忽略)点击

Android:上/下动画滑动菜单

java - 仅当字段非空时才验证电子邮件

java - 为什么我不能启动这个简单的 FXML hello world 应用程序?

java 多级可滚动弹出菜单

c++ - 越过字符串的初始化并跳转到label case

java - 字数统计异常