JavaFX:每次显示菜单时更新菜单子项

时间:2017-02-01 15:39:10

标签: javafx menu

我想在菜单扩展之前每次更新菜单的子项。 这就是我的尝试:

@FXML javafx.scene.control.Menu menu;

public void initiallize(){
// ...

this.menu.setOnAction((event) -> {
                this.menu.getItems().clear();
                this.menu.getItems().add(new MenuItem("Hello"));
                this.menu.getItems().add(new MenuItem("World"));
                this.menu.getItems().add(new MenuItem("!!!!!"));
            });
}

它很接近但不正确。更新仅在单击项目后发生。菜单可能会扩展但使用旧值。使用setOnShown()代替的试验 setOnAction()也不起作用,因为在显示时更新已经太晚了。

如何解决这个问题?

修改1:

这似乎有效:

this.menu.getParentMenu().setOnShowing((event) -> {
                    this.menu.getItems().clear();
                    this.menu.getItems().add(new MenuItem("Hello"));
                    this.menu.getItems().add(new MenuItem("World"));
                    this.menu.getItems().add(new MenuItem("!!!!!"));
                });

这是最好的方法还是有更好的解决方案(没有访问ParentMenu)?

1 个答案:

答案 0 :(得分:1)

这是MenuBar的菜单孩子吗?如果是这样,您必须单击其中一个菜单才能进入MenuItems。您可以在点击发生之前更新MenuItems:

this.menu.setOnMouseEntered(event -> {
    this.menu.getItems().add(new MenuItem("Test"));
});

每当鼠标光标位于菜单本身时,您就会更新MenuItem。