2014-03-06 30 views
1

我需要獲取JavaFX中MultipleSelectionMode中ListView的最後一個選定項目。我的代碼在下面,但它不會給我最後選擇的項目。它似乎從選定的項目中給出一個隨機項目。獲取JavaFX中ListView的最後選定項目

addDocumentPagesListView.getSelectionModel().getSelectedItems().addListener(new ListChangeListener<PageFile>() { 

     @Override 
     public void onChanged(ListChangeListener.Change<? extends PageFile> change) { 
      while (change.next()) { 

       if (change.wasAdded()) { 
        List <? extends PageFile> l = change.getAddedSubList(); 
        Object o = l.get(l.size() - 1);       
        PageFile pf = (PageFile) o; 
        System.out.println("Showing pdf file: " + pf.getFile().getName()); 
       } 
      } 
     } 
    }); 

回答

2

你應該看看selectedItemProperty總是指向最後選擇的項目:

當選擇模型設置爲單一選擇選定的項目屬性是最常用的,但在多選模式下同樣適用。在此模式下,所選項目將始終代表最後一次選擇

+0

謝謝。這是正確的,如果我想要最後選擇的項目。 我應該是更具體的,我也想獲得多項選擇中的項目後未選中最後選定的項目。我希望getAddedSubList()或getList()能夠按照添加的順序保持選擇,但我不確定自己出錯的位置。 – Dave

+0

最後,你是指列表順序中的最後一個還是用戶點擊的最後一個項目? – assylias

+0

如果是後者,您仍然可以使用該屬性來跟蹤每個選擇,但可能有一個更簡單的方法。 – assylias

1

以下作品的代碼,唯一的問題是,做一個多重選擇標記爲change.wasAdded()兩個事件時會調用每個多重選擇。

if (change.wasAdded()) { 
    List<? extends PageFile> l = change.getList(); 
    Object o = l.get(l.size() - 1); 
    if (o != null) { 
     PageFile pf = (PageFile) o; 
     System.out.println("Showing pdf file: " + pf.getFile().getName()); 
    } 
} else if (change.wasRemoved()) { 
    List<? extends PageFile> l = change.getList(); 
    Object o = l.get(l.size() - 1); 
    if (o != null) { 
     PageFile pf = (PageFile) o; 
     System.out.println("Showing pdf file: " + pf.getFile().getName()); 
    } 
} 
+0

+1分享您的發現! – assylias

相關問題