2017-01-13 6 views
0

Я пытаюсь сделать Dynamical Size MenuButton.Как удалить MenuItems из MenuButtons с Javafx

Я разрабатываю библиотечную программу. Книги идут на полки. В ходе программы количество полок может увеличиваться или уменьшаться. Я хочу сделать кнопку меню, которая может отражать полки в библиотеке - набор пунктов меню должен увеличиваться, если количество полок увеличивается и уменьшается, если количество полок уменьшается. Это мой текущий код. Однако он не удаляет никаких элементов MenuItems. Кроме того, он дублирует все элементы MenuItems, которые уже включены.

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?

Благодаря

ответ

0

Просто modifiy 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 существует несколько способов удаления и добавления элементов в список, как 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)) { 
     ... 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^