Events GWT 2.0中切换StackLayoutPanel堆栈时发生火灾事件

Events GWT 2.0中切换StackLayoutPanel堆栈时发生火灾事件,events,gwt,event-handling,Events,Gwt,Event Handling,当我在GWT 2.0中切换StackLayoutPanel的堆栈时,我试图捕获一个事件。 最大的问题是,我不知道触发了哪一个事件,而且似乎没有文档,我已使用addDomHandler()添加了一个ChangeHandler,但这没有起作用。 不幸的是,StackLayoutPanel没有实现getSelectedIndex()函数,因此我不能只使用ClickEvent然后检查所选索引是否已更改 是我使用StackPanel的唯一解决方案,还是有办法让它与StackLayoutPanel一起工作?

当我在GWT 2.0中切换StackLayoutPanel的堆栈时,我试图捕获一个事件。
最大的问题是,我不知道触发了哪一个事件,而且似乎没有文档,我已使用addDomHandler()添加了一个ChangeHandler,但这没有起作用。
不幸的是,StackLayoutPanel没有实现getSelectedIndex()函数,因此我不能只使用ClickEvent然后检查所选索引是否已更改


是我使用StackPanel的唯一解决方案,还是有办法让它与StackLayoutPanel一起工作?

经过一些实验后,我做了什么:使用标签作为标题的小部件,宽度为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。

此工作表单我:

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子类化,以便尝试修复remove bug;)() ... 如果您将StackLayoutPanel子类化,则可以使用ClickWrapper类触发事件…更清楚地说,id是一个整数,其中0是添加到StackLayoutPanel的第一项,1是下一项,以此类推。SelectionEvent现在也被键入(SelectionEvent)。这在GWT2.5.1中对我来说非常有用。