我可以使用removeFromParent从一个没有onModuleLoad的类中删除RootPanel上的内容。但是,您可以从另一个类向RootPanel添加一个小部件吗?我无法弄清楚该怎么做。例如:
public classA extends EntryPoint{
public void onModuleLoad(){
MyPanel panel = new MyPanel();
RootPanel.get("a").add(panel);
}
}
然后在MyPanel类里面的onclick动作中我想要这样做:
Object s = event.getSource();
Button sButton = (Button)s;
sButton.getParent().removeFromParent();
这样可行,但现在我们已从rootpanel中删除了面板,我想用新面板替换它。我如何从其他课程中做到这一点。我不确定我是否必须访问RootPanel,这似乎是不可能的,或者我是否需要另一个似乎没有意义的入口点。任何建议将不胜感激。
答案 0 :(得分:1)
在MyPanel类中添加此代码。我没有尝试过这段代码。但它应该可以工作。从onClick方法调用buttonClicked方法
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 :(得分:1)
由于某种原因,当我开始使用gwt时,我认为RootPanel无法从EntryPoint.onModuleLoad()外部访问,但只要您导入RootPanel就可以了。我很想知道你为什么这么想,因为我不记得为什么我曾经想过同样的事情。无论哪种方式,您都有两种选择:
一个是:
Object s = event.getSource();
Button sButton = (Button)s;
sButton.getParent().removeFromParent();
RootPanel.get("a").add(nextPanel);
另一种情况是,如果您确实想要访问无法访问的内容(就像我提到RootPanel完全可访问的那样),您可以创建一个访问它的方法。因此,如果truley无法访问onModuleLoad()之外的RootPanel,您可以执行以下操作:
RootPanel root = null;
public static RootPanel getRootPanel(){
return root;
}
public void onModuleLoad(){
root = RootPanel.get("a");
...
}
然后在任何你想要的课上你都可以说:
ClassA.getRootPanel().add(Whatever Widget);