2011-10-07 20 views
1

当我在Stackpanel之间切换窗口小部件时,是否有任何方法来获取事件? 有点像堆栈面板的openhandler。我必须知道在Stackpanel上打开Widget的索引 。GWT开放事件的Stackpanel处理程序

+0

没有人解决方案? – ph09

+0

以及你的问题不是很清楚,我可以发表一个例子吗? – Stefan

+0

那么,我已经有了一个Stackpanel,它上面有一些Widget。一个小工具已打开。现在我想要一个处理程序在用户打开另一个窗口小部件时注意到我。所以我总是知道Stackpanel的哪个孩子是开放的。知道我的意思吗? – ph09

回答

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适用于怪癖模式和StackLayout面板适用于标准模式。我将StackLayoutPanel或任何与Layout相关的小部件作为新的GWT小部件使用它们,就像新的DataGrid一样。

+0

谢谢YOUT,但: - 方法addSelectionHandler(新SelectionHandler (){})是未定义的类型的StackPanel - 方法getVisibleIndex()是未定义的类型的StackPanel 我认为一个StackPanel也没有方法,如这个?! – ph09

+0

你说得对,我正在检查StackLayoutPanel。如果您没有任何兼容性问题,则可以替换您的StackPanel。 – JoulSauron

+0

您正在使用哪个GWT版本?在GWT 2.4中,StackPanel有'getSelectedIndex()'。 – JoulSauron

1

您可以在DecoratedStackPanel(也可能是一个StackPanel)添加一个单击处理程序,并使用getSelectedIndex()如下:

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

通过overridding的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; 
    } 

}