2011-08-30 74 views
3

我需要添加一個列表框/組合框,允許用戶選擇多個值。GWT列表框多選

我知道有一個設置爲true的GWT API ListBox 與isMultipleSelect()中已經可用。但我沒有得到任何直接的方式來從列表框中獲取所有選定的reocrds。

在google上的一些教程是sugesesting工具ChangeHandleronChange方法。

我認爲應該有其他方法。

任何指針,將不勝感激。

回答

3

創建的ListBox自己小的子類,提供像

public LinkedList<Integer> getSelectedItems() { 
    LinkedList<Integer> selectedItems = new LinkedList<Integer>(); 
    for (int i = 0; i < getItemCount(); i++) { 
     if (isItemSelected(i)) { 
      selectedItems.add(i); 
     } 
    } 
    return selectedItems; 
} 

方法的GWT API不提供直接的方式。

+0

我在想這樣的東西..但不是通過創建子類。我喜歡這個。謝謝.. –

4

您可以瀏覽ListBox中的項目並致電isItemSelected(int)查看是否選擇了該項目。

+0

1,因爲這在getSelectedIndex()''的的Javadoc實際上提到:如果選擇了多個項目,該方法將返回所述第一選擇的項目(isItemSelected(INT))可以用來查詢單個項目)。 – z00bs

+0

@Zoltan:爲此我需要遍歷整個列表並檢查相同。我不想更喜歡 –

+0

@zoobs:它也提到了..「如果選擇多個項目,則此方法將返回第一個選定項目」 –

2

如果你不想子類的列表框,下面顯示瞭如何從外界獲得所選擇的項目:該方法已運行

public void getSelectedItems(Collection<String> selected, ListBox listbox) { 
     HashSet<Integer> indexes = new HashSet<Integer>(); 
     while (listbox.getSelectedIndex() >= 0) { 
      int index = listbox.getSelectedIndex(); 
      listbox.setItemSelected(index, false); 
      String selectedElem = listbox.getItemText(index); 
      selected.add(selectedElem); 
      indexes.add(index); 
     } 
     for (Integer index : indexes) { 
      listbox.setItemSelected(index, true); 
     } 
    } 

後所選擇的集合將包含所選元素。

+3

感謝您的答案。問題現在已經超過一年了,我不再工作在GWT –

+0

+1。比遍歷整個列表更好! –

0

您必須迭代ListBox中的所有項目。唯一的捷徑是使用getSelectedItem()從第一個選定項目進行迭代,它將返回多選ListBox中的第一個選定項目。

public List<String> getSelectedValues() { 
    LinkedList<String> values = new LinkedList<String>(); 
    if (getSelectedIndex() != -1) { 
     for (int i = getSelectedIndex(); i < getItemCount(); i++) { 
      if (isItemSelected(i)) { 
       values.add(getValue(i)); 
      } 
     } 
    } 
    return values; 
}