当选择一个gwt列表框时,其他组应该未选中

时间:2011-07-13 11:28:09

标签: gwt

我想创建一个自定义组件,它可以包含N个ListBox,当选择一个List框时,应该取消选中其他组件。有没有办法做到这一点..任何人都可以建议我。

提前致谢!!

2 个答案:

答案 0 :(得分:0)

是的,你可以这样做。

执行此操作的一种方法是内部事件总线 -

1)为自定义小部件创建一个事件总线。

2)创建自定义选定的活动

3)创建的每个列表框都应该使用此事件总线为自定义选定事件注册处理程序。

4)如果列表被选中/聚焦(每当你想要取消选择其他人时),它将在事件总线上用其Id激发自定义选定事件。

5)其他列表框将收到此事件,检查它是否来自它们,如果没有,将取消选择/设置选择为空

另一种方式,不是让事件总线控制它,而是创建一个在选择时调用的自定义函数,该函数必须遍历所有列表并取消选择它们。

答案 1 :(得分:0)

Jai给了你一些好主意,但这是我的类似功能的代码(不是N ListBoxes,但你应该能够扩展/概括它):

@UiHandler({ "listBox1", "listBox2" })
public void onFocus(FocusEvent e) {
  // If one ListBox has an item selected, and the user click's the other, unselect previous (mutually exclusive).
  if (listBox1.getSelectedIndex() > -1 || listBox2.getSelectedIndex() > -1) {
    if (listBox1.getSelectedIndex() > -1 && e.getRelativeElement() == listBox2.getElement()) {
      listBox1.setSelectedIndex(-1);
    }
    else if (listBox2.getSelectedIndex() > -1 && e.getRelativeElement() == listBox1.getElement()) {
      listBox2.setSelectedIndex(-1);
    }
  }
}

如您所见,我使用了UiHandler语法,并在onFocus事件期间执行了“is selected”检查。用英语:

  1. 如果任何ListBox选择了一个项目(如果没有ListBox选择了一个项目,那么检查所有项目都没有意义。)
  2. 如果ListBox 1选择了一个项目,并且(焦点)事件来自任何其他ListBox:
    • 是 - 取消选择ListBox 1项
    • 否 - 对ListBox 2 ... N
    • 重复步骤2