2011-10-07 21 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; 
    } 

}