2017-01-03 11 views
1

В настоящее время я занимаюсь JavaFX. И у меня проблема с ListView. Я могу сделать прослушиватель для множественного выбора ListView. Однако, когда я отменяю выбор, слушатель, который я сделал, не отражает отмену. Как я могу сделать слушателя, который его отражает? Следующее - слушатель, который я сделал.Добавление слушателя для отмены выбора в ListView (JavaFX)

ListView<String> lv = new ListView<>(FXCollections.observableArrayList(stringArray)); // stringArray is an array that I made. 

lv.getSelectionModel().selectedItemProperty().addListener(ch -> { 
     System.out.println("size: " + lv.getSelectionModel().getSelectedIndices().size()); 
    }); 

ответ

1

Для изменений в выборе, когда множественный выбор включены, добавить ListChangeListener к selectedItems списка (обратите внимание selectedItems, не selectedItem):

lv.getSelectionModel().getSelectedItems().addListener(
    (ListChangeListener.Change<? extends String> ch) -> { 
     System.out.println("size: " + lv.getSelectionModel().getSelectedIndices().size()); 
    } 
); 

Обратите внимание, что если вы только заинтересованы в выбор пуст, вы можете сделать

Bindings.isEmpty(lv.getSelectionModel().getSelectedItems()).addListener(
    (obs, selectionWasEmpty, selectionIsNowEmpty) -> { 
     if (selectionIsNowEmpty) { 
      System.out.println("Nothing is selected"); 
     } else { 
      System.out.println("Something is selected"); 
     } 
    } 
); 
+0

«InvalidationListener» тоже сделал бы трюк ... – fabian

+0

Чтобы прояснить комментарий @ fabian, который был опубликован до того, как я отредактировал ответ, 'InvalidationListener' будет работать в списке' selectedItems' (по довольно сложным причинам), но может быть вызван без необходимости на «пустое связывание» во втором блоке кода (которого не было, когда прокомментировал фабиан). –

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

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