在GWT 2.0中切换StackLayoutPanel堆栈时的Fire事件

时间:2009-12-11 19:45:06

标签: events gwt event-handling

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

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

4 个答案:

答案 0 :(得分:3)

我相信GWT 2.0.3 StackLayoutPanel有方法addSelectionHandler。 Fired事件是SelectionEvent,event.getSelectedItem()返回相应的堆栈头ID。

答案 1 :(得分:2)

经过一些实验后我做了什么:使用Label作为标题的小部件,宽度为100%,然后添加一个附加的ClickEvent处理程序。每次ClickEvent到达时,都意味着用户点击了标题,因此面板将可见... 不是很好,但它有效。 我尝试使用ClickWrapper包装标题小部件(看看StackLayoutPanel源代码),但它没有用,我不知道为什么......

答案 2 :(得分:1)

我是这样做的

公共类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());
}

}

答案 3 :(得分:0)

这对我有用:

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());
}