GWT ListBox默认未选择

5

我有一个 GWT 的 ListBox,其中包含以下选项:

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

我希望最初不选中任何项,即没有选择任何项。初始缺少选择应该用空文本表示,在选择任何项目后,用户无法选择“无选择项目”。

不幸的是,以下行:

listBox.setSelectedIndex(-1);

抛出 IndexOutOfBoundsException 异常。

GWT ListBox 能够实现这种行为吗?


你可能会最初有一个空字符串作为第一项,一旦用户选择了任何内容,你可以删除第一个。 - Reddy
然后,如果用户第一次打开列表,他/她将看到空选项并能够选择它。 - rafalry
你可以验证它或监听点击事件并删除空白项。 - Reddy
我不能有空白选项。如果在单击时删除,则应选择第一个非空选项 - 它不应该像这样工作。 - rafalry
感谢 Reddy 的提示。 - rafalry
您可以在更改或单击事件上禁用第一个选项。 - Jama A.
3个回答

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);

        }
    });

这是否意味着,如果用户选择空白项,它会自动更改为第一个非空白项? - Adam Parkin

0
值得注意的是,ListBox 使用 select 标签。如果 select 标签没有指定 multiple 属性,则浏览器默认选择第一项,您无法阻止这种行为。不过,您可以修改此行为 - HTML 中的 option 标签可以具有 selected 属性,这意味着它是默认选择。但是,GWT 似乎没有提供任何设置项目为默认选中的方法(如果 addItem 有一个布尔类型的重载用于设置默认选中,或者有一个 setDefaultSelected(int index) 方法将会很好)。

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);
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接