2009-12-08 8 views
1

Je peux utiliser removeFromParent pour se débarrasser de quelque chose sur le RootPanel d'une classe qui ne contient pas onModuleLoad. Cependant, pouvez-vous ajouter un widget au RootPanel d'une autre classe? Je ne peux pas comprendre comment le faire. Ainsi, par exemple:gwt accéder rootpanel depuis l'extérieur de onModuleLoad

public classA extends EntryPoint{ 

public void onModuleLoad(){ 

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

} 

} 

Puis dans la classe MyPanel dans une action onclick je voudrais faire:

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

cela fonctionne, mais maintenant nous avons retirer le panneau de du RootPanel, et je vouloir le remplacer par un nouveau panneau. Comment puis-je faire cela de cette autre classe. Je ne suis pas sûr si je dois accéder à RootPanel, ce qui semble impossible, ou si j'ai besoin d'un autre entryPoint qui ne semble pas avoir de sens. Tout avis sera le bienvenu.

Répondre

1

Ajoutez ce code dans votre MyPanel class.I n'ont pas essayé code.But il devrait work.Call la méthode ButtonClicked de méthode 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

Pour une raison quelconque quand je commencé à utiliser GWT Je pensais que RootPanel était inaccessible depuis l'extérieur de EntryPoint.onModuleLoad() mais c'est tant que vous importez RootPanel. Je serais intéressé de savoir pourquoi vous avez pensé cela parce que je ne me souviens pas pourquoi j'ai pensé la même chose. De toute façon, vous avez deux options:

One est juste:

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

L'autre est si vous voulez réellement accéder à quelque chose qui était inaccessible (qui, comme je l'ai mentionné RootPanel est parfaitement accessible), vous pouvez simplement créer un méthode pour y accéder. Donc, si vous truley ne pouvait pas accéder à l'extérieur de RootPanel onModuleLoad(), vous pouvez faire quelque chose comme ce qui suit:

RootPanel root = null; 

public static RootPanel getRootPanel(){ 
    return root; 
    } 

public void onModuleLoad(){ 

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

et quelle que soit la classe que vous voulez vous pouvez simplement dire:

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