java - 单击按钮后删除 GWT 中生成的面板

标签 java gwt google-gears

我正在尝试创建一个也使用 Google Gears 的 Google Web Toolkit (GWT) 应用程序,但每次我尝试删除该面板时,都会遇到异常,并且该面板仍保留在那里。

这是我得到的异常的摘录(我只包含了调用堆栈的相关位,其余部分只是下降到下面包含的函数中):

java.lang.AssertionError: A widget that has an existing parent widget may not be added to the detach list
    at com.google.gwt.user.client.ui.RootPanel.detachOnWindowClose(RootPanel.java:122)
    at com.google.gwt.user.client.ui.RootPanel.get(RootPanel.java:197) 

我不确定问题是什么,但我真的不喜欢在他们批准使用 Gears 后将按钮留在那里。

我做错了什么?或者有什么建议可以让我以不同的方式做到这一点以使其发挥作用?

if(!gearsFactory.hasPermission()) {
    HorizontalPanel rightPanel = new HorizontalPanel();
    rightPanel.getElement().setId("gearsPrompt");
    rightPanel.setVerticalAlignment(HorizontalPanel.ALIGN_MIDDLE);
    rightPanel.setSpacing(0);
    rightPanel.setHeight("28px");

    InlineLabel enableGearsText = new InlineLabel("Enable Gears for off-line access");
    enableGearsText.getElement().setId("gearsText");
    enableGearsText.addStyleName("titleElement");
    rightPanel.add(enableGearsText);

    final Button gearsButton = new Button("Use Gears");
    gearsButton.getElement().setId("gearsButton");
    gearsButton.addStyleName("titleElement");
    gearsButton.setHeight("24px");

    gearsButton.addClickHandler( new ClickHandler() {
        public void onClick(ClickEvent event) {
            Factory gearsFactory = Factory.getInstance();
            if(gearsFactory != null) {
                if(gearsFactory.getPermission()) {
                    RootPanel gearsPrompt = RootPanel.get("gearsPrompt");
                    gearsPrompt.removeFromParent();
                }
            }
        }
    });

    rightPanel.add(gearsButton);

    RootPanel titleBarRight = RootPanel.get("titleBarRight");
    titleBarRight.add(rightPanel);
}

最佳答案

我发现的一个解决方案是循环遍历“titleBarRight”面板下的所有小部件并删除它包含的所有小部件:

if(gearsFactory.getPermission()) {
    RootPanel titleBarRight = RootPanel.get("titleBarRight");
    java.util.Iterator<Widget> itr = titleBarRight.iterator();
    while(itr.hasNext()) {
        itr.next();
        itr.remove();
    }
}

但不知怎的,这仍然看起来很老套,而且不完全是“正确的方法。”

关于java - 单击按钮后删除 GWT 中生成的面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/962976/

相关文章:

java - 无法使 XPath 与复杂的命名空间一起使用

java - 方法/打印随机数的直方图

Java:Windows 7 外观(或 MouseListener?)需要在 JOptionPane 上单击两次

java - GWT 元素 setAttribute 与 setPropertyString

java - WordPress 和 GWT

javascript - Google Gears 和 jQuery 创建 managedStore 的问题

google-gears - 启用 Google Gears 的网站的完整列表

java - 与mybatis、postgresql对比时间戳

java - 如何配置 SmartGWT TreeGrid 以使用不同类型的对象?

html - google gears 停产,html 5 在草稿中