2013-11-22 5 views
0

Я создал ListView с кучей строк, она имеет режим множественного выбора и, наконец, я добавил слушатель с selectedItemProperty() так же, как следующее:ListView не срабатывает событие изменения на selectedItemProperty

ObservableList<String> myStringsObsList = FXCollections.observableArrayList(strings); 
    ListView<String> listView = new ListView<String>(myStringsObsList); 
    listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); 

    listView.getSelectionModel().selectedItemProperty().addListener(
    new ChangeListener<String>() { 
     public void changed(ObservableValue<? extends String> ov, String old_val, String new_val) 
     { 
     System.out.println("Selection Changed!"); 
     } 
    } 
    }); 

Все напечатано OK при выборе элементов, но как только я начну снимать выделение с помощью Ctrl. Здесь ничего не печатается, так как измененное событие, вероятно, не срабатывает.

Кто-нибудь знает, если это ошибка? или я делаю что-то неправильно здесь?

В конце мне нужно только знать, изменился ли выбор каким-либо образом (будь то выбор или отмена выбора элементов), поэтому я могу запустить другой процесс.

EDIT --- При отмене выбора с помощью Ctrl, «Выбор изменен!» печатается только тогда, когда последний элемент выбранных элементов отменен.

ответ

2

Регистрация этот слушатель вместо этого к ListView:

listView.getSelectionModel().getSelectedItems() 
     .addListener(new ListChangeListener<String>() 
     { 

      @Override 
      public void onChanged(Change<? extends String> arg0) 
      { 
       System.out.println("Selection Changed!"); 

      } 

     }); 
+0

У меня была такая же проблема, и ваше решение работает отлично. благодаря –

0

Тот же ответ, как и выше, но добавить строку, чтобы захватить индексы.

listView.getSelectionModel().getSelectedItems() 
    .addListener(new ListChangeListener<String>() 
    { 

     @Override 
     public void onChanged(Change<? extends String> arg0) 
     { 
      System.out.println("Selection Changed!"); 
      ObservableList<Integer> sel = listView.getSelectionModel().getSelectedIndices(); 
     } 

    }); 
Смежные вопросы