用于打开事件的GWT Stackpanel处理程序

时间:2011-10-07 18:31:01

标签: events gwt handler stackpanel

当我在Stackpanel上的widget之间切换时,有没有办法获得一个事件? 类似于stackpanel的openhandler。我必须知道索引 在Stackpanel上打开一个Widget。

3 个答案:

答案 0 :(得分:1)

使用StackLayoutPanel:http://google-web-toolkit.googlecode.com/svn/javadoc/2.0/com/google/gwt/user/client/ui/StackLayoutPanel.html

使用addSelectionHandler()方法。要获取所选小部件,您可以使用getVisibleIndex()getVisibleWidget()

myStackPanel.addSelectionHandler(new SelectionHandler<Integer>() {
    @Override
    public void onSelection(SelectionEvent<Integer> event) {

        int selectedWidgetIndex = stackPanel.getVisibleIndex());

        //Do stuff with the selectedWidgetIndex
    }
});

编辑:这是使用StackLayoutPanel,OP使用StackPanel。它们之间的区别在于StackPanel用于quirks模式,StackLayout Panel用于标准模式。我将StackLayoutPanel或任何与布局相关的小部件作为新的GWT小部件使用它们,就像新的DataGrid一样。

答案 1 :(得分:1)

您可以在DecoratedStackPanel(可能还有StackPanel)上添加点击处理程序,并使用getSelectedIndex(),如下所示:

myDecoratedStackPanel.addHandler(new ClickHandler()
{
    @Override
    public void onClick(ClickEvent clickEvent)
    {
        Window.alert("" + myDecoratedStackPanel.getSelectedIndex());
    }
}, ClickEvent.getType());

答案 2 :(得分:0)

通过覆盖showStack方法,这是一件轻而易举的事。尝试类似:

public class StackPanelX extends StackPanel implements IHasChangeHandler {

    String ctx_id=null;
    IChangeHandler chandler=null;

    public StackPanelX() {
        super();
    }

    public void showStack(int index) {
        int currentStack = this.getSelectedIndex(); 

        super.showStack(index);

        if (currentStack!=index)
            if (chandler!=null) 
                chandler.onChange(ctx_id, new Variant(index));

    }

    @Override
    public void setChangeHandler(String ctx_id, IChangeHandler handler) {
        this.ctx_id=ctx_id;
        this.chandler=handler;
    }

}