从GWT FlowPanel中移除小部件

问题描述:

我有以下课程来管理基于用户选择的菜单项显示的内容。我遇到了一个问题,它不会删除以前的小部件。我通过使用getWidgetIndex检查了面板中存在的小部件,并且试图使用对象和索引删除小部件,但没有成功。从GWT FlowPanel中移除小部件

当我尝试删除我得到一个异常,这也包括在下面。想法?

public class BaseContentHandler implements ClickHandler{ 

    private Content item; 

    public BaseContentHandler(Content content){ 
     this.item = content; 
    } 

    @Override 
    public void onClick(ClickEvent event) { 


     if(currentWidget != null){ 
      contentPanel.remove(contentPanel.getWidgetIndex(currentWidget)/*currentWidget*/);  
     } 
     currentWidget = this.item; 
     contentPanel.add(this.item); 

    } 

} 

例外:(类型错误):d是空 堆栈:BWB

其他建议也欢迎。

詹姆斯

+0

“currentWidget”在哪里定义? – Jla 2011-01-11 15:53:35

你可能会更好使用.hide()上currentWidget和.show()上this.item,让他们都在面板上,而不是动态插入和删除它们。

您发布的代码片段中缺少某些内容 - contentPanel定义了哪里?

我想为NPE的唯一可能的点这一行: contentPanel.remove(contentPanel.getWidgetIndex(currentWidget)/ currentWidget /);

看来您描述的异常来自JavaScript工具,因为“d”是GWT编译的结果,因此它是一个javascript对象。要从javascript级别获得更详细的信息,您应该以详细模式编译GWT项目:

  1. 单击“编译GWT项目”图标(在Eclipse中)。
  2. 选择“输出样式” - 详细并编译。
  3. 再次运行您的项目,您将得到相同的异常,但名称会告诉您什么是您使用的Java对象,以及java代码中发生异常的原始行是什么。