默认情况下未选中GWT ListBox

时间:2012-03-02 13:07:14

标签: java gwt selection default

我有一个GWT的ListBox包含项目:

listBox = new ListBox();
listBox.addItem("A");
listBox.addItem("B");
listBox.addItem("C");

我希望它最初未被选中 - 这样就不会选择任何项目。最初缺少选择应该用空文本表示,在选择任何项目后,用户不能选择“无选择项目”。

不幸的是以下一行:

listBox.setSelectedIndex(-1);

抛出IndexOutOfBoundsException

是否可以使用GWT ListBox获取此类行为?

3 个答案:

答案 0 :(得分:8)

是的,这是正常情况,因为当你拨打setSelectedIndex()时,它会检查索引是否在范围内。 ListBox类中有方法。

 private void checkIndex(int index) {
    if (index < 0 || index >= getItemCount()) {
      throw new IndexOutOfBoundsException();
    }
  }

因此默认情况下会选择0索引。如果要为第一个项目添加空文本项,请使用空字符串为零索引添加其他项目:

listBox = new ListBox();
listBox.addItem(" ");
listBox.addItem("A");
listBox.addItem("B");
listBox.addItem("C");
listBox.addChangeHandler(new ChangeHandler() {
        public void onChange(ChangeEvent changeEvent) {
            SelectElement selectElement = listBox.getElement().cast();
            selectElement.getOptions().getItem(0).setDisabled(true);

        }
    });

答案 1 :(得分:0)

值得注意的是ListBox使用select标签。如果选择标记未指定multiple属性,则浏览器默认选择第一个项目,您无法阻止其执行任何操作。但是,您可以修改此行为 - HTML中的选项标记可以具有选定的属性,这意味着它是默认选择。但GWT似乎没有提供任何方法来将项目设置为默认选择(如果addItem的重载采用默认选择的布尔值或setDefaultSelected(int index)方法,那将会很好。) / p>

答案 2 :(得分:0)

如果需要从多个GWT ListBox中“取消选择”所有值,则始终可以遍历当前选定项并将其“ selected”值设置为false。

在这里,您可以了解如何创建getSelectedItems()和unselectValues方法。

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

public void unselectValues() {
  for (Integer index: getSelectedItems()) {
    setItemSelected(index, false);
  }
}