GWT - ListBox - 预选项目

时间:2009-09-17 18:30:11

标签: java gwt user-interface listbox

我对使用Spring + GWT预先选择(setSelectedIndex(index))ListBox中的项目表示怀疑。

我有一个包含面板的对话框,这个面板有一个FlexPanel,我在其中放了几个ListBox,这些数据填充了我的数据库。

但是这个Panel用于更新我的数据库中的实体,因此我希望它预先选择此项目的当前属性,允许用户随意更改。

我在窗口小部件的更新方法中填写。

我尝试在update方法中设置selectedItem,但它给出了一个空错误。

我搜索了几个地方,似乎ListBox只在显示的确切时刻填充。因此,预先选择是不可能的。

我想到了一些事件,在显示页面时会触发。

onLoad()无效..

任何人都有东西可以帮助我在这里吗?

4 个答案:

答案 0 :(得分:3)

我真的认为可以在选择附加和显示之前设置选择,但您必须先添加数据才能选择索引。如果这是一个单选框,你可以这样写:

void updateListContent(MyDataObject selected, List<MyDataObject> list){
     for (MyDataObject anObject : list) {
          theListBox.addItem(anObject.getTextToDisplay(), anObject.getKeyValueForList());
     }
     theListBox.setSelectedIndex(list.indexOf(selected));
}

如果这是一个多选框,这样的东西可能会起作用:

void updateListContent(List<MyDataObject> allSelected, List<MyDataObject> list){
     for (MyDataObject anObject : list) {
          theMultipleListBox.addItem(anObject.getTextToDisplay(), anObject.getKeyValueForList());
     }
     for (MyDataObject selected : allSelected) {
         theMultipleListBox.setItemSelected(list.indexOf(selected), true);
     }
}

(注意我实际上没有编译过这个,所以可能存在拼写错误。这假设选定的元素确实存在于可能的值列表中,所以如果你不能确定这一点你会需要添加一些边界检查。)

答案 1 :(得分:0)

我很乐意在附件之前设置值和选择索引,因为据我所知它应该有效。但是,在IE上将所选索引设置为-1时会出现错误,请参阅http://code.google.com/p/google-web-toolkit/issues/detail?id=2689

答案 2 :(得分:0)

预选也适用于setValue() - 函数。因此,不需要复杂的代码。

答案 3 :(得分:0)

private void setSelectedValue(ListBox lBox, String str) {
    String text = str;
    int indexToFind = -1;
    for (int i = 0; i < lBox.getItemCount(); i++) {
        if (lBox.getValue(i).equals(text)) {
            indexToFind = i;
            break;
        }
    }
    lBox.setSelectedIndex(indexToFind);
}