【问题标题】:JavaFX: Update menu sub-items everytime menu shownJavaFX:每次显示菜单时更新菜单子项
【发布时间】:2017-02-01 15:39:09
【问题描述】:

我希望每次更新菜单的子项,然后再展开菜单。 这是我尝试过的:

@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)?

【问题讨论】:

    标签: javafx menu


    【解决方案1】:

    这是 MenuBar 的子菜单吗?如果是这样,您肯定必须单击其中一个菜单才能访问 MenuItems。您可以通过执行以下操作在单击发生之前更新 MenuItems:

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

    每次鼠标光标位于菜单本身时,您都会更新 MenuItems。

    【讨论】:

      猜你喜欢
      • 2019-07-16
      • 2018-12-26
      • 1970-01-01
      • 2019-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      相关资源
      最近更新 更多