2011-10-07 3 views
1

Stackpanel에서 위젯간에 전환 할 때 이벤트를 가져 오는 방법이 있습니까? stackpanel 용 오픈 핸들러와 같은 것입니다. 나는 의 색인을 Stackpanel에 공개 위젯으로 알고 있어야합니다.열린 이벤트에 대한 GWT Stackpanel 처리기

+0

아무도 해결책이 없습니까? – ph09

+0

질문에 대한 답변이 너무 명확하지 않아 ... 예제를 게시 할 수 있습니까? – Stefan

+0

글쎄, 나는 위젯과 함께 Stackpanel을 가지고있다. 하나의 위젯이 열려 있습니다. 이제 사용자가 다른 위젯을 열 때 알려주는 핸들러를 갖기를 원합니다. 그래서 나는 항상 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 
    } 
}); 

EDIT : 이것은 StackLanoutPanel을 사용하며, OP는 StackPanel을 사용합니다. 그것들의 차이점은 StackPanel이 단조 모드 용이고 StackLayout 패널이 표준 모드 용이라는 것입니다. 새 GWT 위젯이 새 DataGrid와 같이 StackLayoutPanel 또는 레이아웃 관련 위젯을 사용할 때 StackLayoutPanel 또는 Layout 관련 위젯을 사용합니다.

+0

이 행해져 Yout 고맙지 만 : - 메소드 addSelectionHandler를 (새 SelectionHandler이 () {}) 유형 StackPanel의 에 대한 정의되지 않는다 - 방법 getVisibleIndex()는 유형 StackPanel의 에 대한 정의되지 나는 StackPanel을 좋아하지 방법이 있다고 생각 이?! – ph09

+0

맞습니다. StackLayoutPanel을 확인했습니다. 호환성 문제가없는 경우 StackPanel을 교체 할 수 있습니다. – JoulSauron

+0

어떤 GWT 버전을 사용하고 있습니까? GWT 2.4에서는 StackPanel에'getSelectedIndex()'가 있습니다. – JoulSauron

1

당신은 (아마도과 StackPanel을)를 DecoratedStackPanel에 클릭 핸들러를 추가하고 다음과 같이 getSelectedIndex()를 사용하여 다음 showStack 방법을 overridding으로

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

, 그것은 바람이다. 다음과 같이 시도하십시오.

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

}