2013-11-22 26 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!"); 
     } 
    } 
    }); 

選擇項目時一切都打印完好,但是一旦我開始使用Ctrl取消選擇項目。這裏沒有打印任何內容,因爲更改的事件可能未被解僱。

任何人都知道這是否是一個錯誤?或者我在這裏做錯了什麼?

最後我只需要知道選擇是否發生了變化(無論是選擇還是取消選擇項目),因此我可以啓動另一個進程。

編輯--- 當用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(); 
     } 

    });