我有一个GWT的ListBox包含项目:
listBox = new ListBox();
listBox.addItem("A");
listBox.addItem("B");
listBox.addItem("C");
我希望它最初未被选中 - 这样就不会选择任何项目。最初缺少选择应该用空文本表示,在选择任何项目后,用户不能选择“无选择项目”。
不幸的是以下一行:
listBox.setSelectedIndex(-1);
抛出IndexOutOfBoundsException
。
是否可以使用GWT ListBox获取此类行为?
答案 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);
}
}