2011-08-30 56 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; 
}