我需要添加一个listbox / combobox,允许用户选择多个值。
我知道GWT API中已有一个版本 ListBox 将isMultipleSelect()设置为true。但我没有直接从列表框中获取所有选定的reocrds。
谷歌的一些教程是最实用的ChangeHandler
onChange
方法。
我认为应该有其他方式。
任何指针都会受到赞赏。
答案 0 :(得分:4)
您可以浏览ListBox
中的项目,然后致电isItemSelected(int)
查看该项目是否已被选中。
答案 1 :(得分: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不提供直接的方式。
答案 2 :(得分: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 :(得分: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;
}