我正在尝试制作动态大小的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?
由于
答案 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
一样,有多种方法可以删除元素并将其添加到列表中,例如add
,remove
,clear
,等等。
使用Set
,例如
Set<String> items = new shelfBtn.getItems().stream()
.map(MenuItem::getText)
.collect(Collectors.toCollection(HashSet::new));
for(String shelf : shelfs){
if (items.add(shelf)) {
...
}
}