默认情况下未选中GWT ListBox

raf*_*lry 5 java gwt default selection

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

listBox = new ListBox();
listBox.addItem("A");
listBox.addItem("B");
listBox.addItem("C");
Run Code Online (Sandbox Code Playgroud)

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

不幸的是以下行:

listBox.setSelectedIndex(-1);
Run Code Online (Sandbox Code Playgroud)

抛出IndexOutOfBoundsException.

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

Õzb*_*bek 8

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

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

所以默认情况下会选择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);

        }
    });
Run Code Online (Sandbox Code Playgroud)