在GWT 2.0中切换堆栈StackLayoutPanel时触发事件
我试图捕捉一个事件,当我在GWT 2.0中切换StackLayoutPanel的堆栈时。
最大的问题是我不知道哪个事件被解雇,似乎没有文档,我添加了一个带有addDomHandler()的ChangeHandler,但没有奏效。
不幸的是,StackLayoutPanel没有实现getSelectedIndex()函数,所以我不能只使用ClickEvent,然后检查选定的索引是否已经改变。在GWT 2.0中切换堆栈StackLayoutPanel时触发事件
是我唯一使用StackPanel的解决方案,还是有办法让它与StackLayoutPanel一起工作吗?
在做了一些实验后,我做了如下工作:使用Label作为标题的窗口部件,宽度为100%,然后添加一个ClickEvent处理程序。每次ClickEvent到达时,这意味着用户点击标题,所以面板将可见... 不是很好,但它的工作。 我试图用一个ClickWrapper(看看到StackLayoutPanel源代码)包住头小部件,但它没有工作,我不知道到底为什么...
我这样做的
公共类StackComponent扩展StackLayoutPanel实现HasChangeHandlers {
public StackComponent(Unit unit) {
super(unit);
}
@Override
public void showWidget(Widget widget) {
super.showWidget(widget);
fireEvent(new StackChangeEvent(widget));
}
@Override
public HandlerRegistration addChangeHandler(ChangeHandler handler) {
return addDomHandler(handler, ChangeEvent.getType());
}
}
相信在GWT 2.0.3 StackLayoutPanel有方法addSelectionHandler。触发的事件是SelectionEvent,event.getSelectedItem()返回相应的堆栈标题ID。
更清楚的是,id是一个Integer,其中0是添加到StackLayoutPanel的第一项, 1是下一个等等。SelectionEvent现在也被输入(SelectionEvent
这工作我形成:
private int selectedIndex = 0;
public Main() {
initWidget(ourUiBinder.createAndBindUi(this));
navigatorStackPanel.add(yourWidgetOne, "Title one");
navigatorStackPanel.add(yourWidgetTwo, "Title two");
navigatorStackPanel.addHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (navigatorStackPanel.getSelectedIndex() != selectedIndex) {
selectedIndex = navigatorStackPanel.getSelectedIndex();
if (selectedIndex == 0)
do something one;
else
do something two;
GWT.log(" Changed");
}
}
}, ClickEvent.getType());
}
最后我不得不继承StackLayoutPanel,以尝试解决删除的bug;)(http://code.google.com/p/google-web-toolkit/issues/detail?id = 4174)...如果你是StackLayoutPanel的子类,你可以使用ClickWrapper类触发事件... – danigb 2010-01-10 16:39:03