【问题标题】:How to remove MenuItems from MenuButtons with Javafx如何使用 Javafx 从 MenuButtons 中删除 MenuItems
【发布时间】:2017-01-13 07:12:22
【问题描述】:

我正在尝试制作一个动态大小的菜单按钮。

我正在设计一个库程序。书在书架上。在计划过程中,货架的数量可能会增加或减少。 我想制作一个可以反映图书馆中书架的菜单按钮 - 如果书架数量增加,MenuItems 集应该增加,如果书架数量减少,则应该减少。 这是我当前的代码。但是,它不会删除任何 MenuItem。此外,它复制了所有已包含的 MenuItem。

previous code omitted…
//the button “shelfBtn.getItems” is a MenuButton defined elsewhere

Button btn = new Button(“Refresh”);
            btn.setTranslateX(-20);
            btn.setOnAction(new EventHandler<ActionEvent>() {

                @Override
                public void handle(ActionEvent event) {                                             
                        for(String shelf : shelfs){
                            MenuItem newShelf = new MenuItem(shelf);
                            newShelf.setOnAction(new EventHandler<ActionEvent() {

                                @Override
                                public void handle(ActionEvent event) {
                                    // ignore this
                                    shelfField.setText(shelf);
                                }
                            });
                            shelfBtn.getItems().add(newShelf);
                        }
                    }
            });
remaining code omitted…

我还尝试使用迭代来限制创建额外的菜单项 - 无济于事。

另外:

1) 有没有办法只删除一个 menuItem?

2) 有没有办法清除 MenuButton?

谢谢

【问题讨论】:

    标签: java javafx menuitem


    【解决方案1】:

    只需修改itemsObservableList:

    @Override
    public void start(Stage primaryStage) {
        ListView<String> listView = new ListView<>();
        for (int i = 0; i < 26; i++) {
            listView.getItems().add(Character.toString((char) ('a'+i)));
        }
        listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
    
        MenuButton menuButton = new MenuButton();
    
        Button btn = new Button("Modify");
        btn.setOnAction((ActionEvent event) -> {
            // create menu items from selection
            menuButton.getItems().clear();
            for (String s : listView.getSelectionModel().getSelectedItems()) {
                menuButton.getItems().add(new MenuItem(s));
            }
        });
    
        Scene scene = new Scene(new VBox(listView, menuButton, btn));
    
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    

    与任何List 一样,有多种方法可以删除和添加元素到列表中,例如addremoveclear 等。


    可以通过使用Set 来防止添加重复项,例如

    Set<String> items = new shelfBtn.getItems().stream()
                                               .map(MenuItem::getText)
                                               .collect(Collectors.toCollection(HashSet::new));
    for(String shelf : shelfs){ 
        if (items.add(shelf)) {
            ...
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-09
      • 2016-04-23
      • 2019-02-26
      • 2017-10-12
      • 1970-01-01
      相关资源
      最近更新 更多