gwt从onModuleLoad外部访问rootpanel

时间:2009-12-08 19:32:10

标签: web-applications gwt java-ee

我可以使用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,这似乎是不可能的,或者我是否需要另一个似乎没有意义的入口点。任何建议将不胜感激。

2 个答案:

答案 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);