如何使用Javafx从MenuButtons中删除MenuItems

时间:2017-01-13 07:12:22

标签: java javafx menuitem

我正在尝试制作动态大小的MenuButton。

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

我也尝试使用迭代来限制额外的menuItem被创建 - 无济于事。

此外:

1)有没有办法删除menuItem?

2)有没有办法清除MenuButton?

由于

1 个答案:

答案 0 :(得分:0)

只需修改items ObservableList

即可
@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)) {
        ...
    }
}