我想在菜单扩展之前每次更新菜单的子项。 这就是我的尝试:
@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)?
答案 0 :(得分:1)
这是MenuBar的菜单孩子吗?如果是这样,您必须单击其中一个菜单才能进入MenuItems。您可以在点击发生之前更新MenuItems:
this.menu.setOnMouseEntered(event -> {
this.menu.getItems().add(new MenuItem("Test"));
});
每当鼠标光标位于菜单本身时,您就会更新MenuItem。