从GWT FlowPanel中删除小部件

时间:2011-01-11 13:05:54

标签: gwt

我有以下课程,用于根据用户选择的菜单项管理我显示的内容。我有一个问题,它没有删除以前的小部件。我已经使用getWidgetIndex检查了Panel中存在的小部件,我尝试使用对象和索引删除小部件但没有成功。

当我尝试删除时,我得到一个例外,下面也包含了这个例外。想法?

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

    }

}

异常:(TypeError):d为null  stack:Bwb

也欢迎其他建议。

詹姆斯

2 个答案:

答案 0 :(得分:0)

最好在currentWidget上使用.hide(),在this.item上使用.show(),将它们全部保留在面板中,而不是动态插入和删除它们。

答案 1 :(得分:0)

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

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

您所描述的异常似乎来自javascript工具,因为“d”是GWT编译后的javascript对象。要从javascript级别获取更详细的信息,您应该在详细模式下编译GWT项目:

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