2009-12-08 48 views
1

我可以使用removeFromParent從沒有onModuleLoad的類中刪除RootPanel上的某些內容。但是,你可以從另一個類向RootPanel添加一個小部件嗎?我無法弄清楚如何去做。因此,例如:gwt從onModuleLoad外部訪問rootpanel

public classA extends EntryPoint{ 

public void onModuleLoad(){ 

MyPanel panel = new MyPanel(); 
RootPanel.get("a").add(panel); 

} 

} 

然後一個onclick動作裏面MyPanel類裏面我想做到這一點:

Object s = event.getSource(); 
Button sButton = (Button)s; 
sButton.getParent().removeFromParent(); 

這個工作,但現在我們已經從rootpanel刪除面板,和我想用新面板替換它。我如何從其他班級那裏做到這一點。我不確定是否必須訪問RootPanel,這似乎是不可能的,或者如果我需要另一個似乎沒有意義的入口點。任何意見,將不勝感激。

回答

1

在MyPanel class.I添加該代碼還沒有嘗試過這種code.But應該從OnClick方法

private void buttonCLicked(){ 
    for(int i=0;i<RootPanel.get("a").getWidgetCount();i++){ 
     if(RootPanel.get("a").getWidget(i) .equals(this)){ 
      RootPanel.get("a").remove(i); 
      RootPanel.get("a").add(newPanel); 
      break; 
     } 
    } 
} 
1

work.Call的buttonClicked方法出於某種原因,當我開始使用GWT我認爲從EntryPoint.onModuleLoad()外部無法訪問RootPanel,但只要您導入RootPanel即可。我想知道你爲什麼這樣想,因爲我不記得我爲什麼曾經想過同樣的事情。無論哪種方式,你有兩個選擇:

一個就是:

Object s = event.getSource(); 
Button sButton = (Button)s; 
sButton.getParent().removeFromParent(); 
RootPanel.get("a").add(nextPanel); 

另一種是,如果你真的想獲得的東西是無法訪問的(這就像我提到的RootPanel是完全訪問),你可以只創建一個方法來訪問它。所以,如果你truley無法訪問RootPanel外onModuleLoad(),你可以這樣做以下:

RootPanel root = null; 

public static RootPanel getRootPanel(){ 
    return root; 
    } 

public void onModuleLoad(){ 

root = RootPanel.get("a"); 
... 
     } 

,然後在任何類,你想,你可以只說:

ClassA.getRootPanel().add(Whatever Widget);