SmartGWT:向VStack动态添加自定义小部件

时间:2013-04-24 08:22:17

标签: java gwt smartgwt

我需要一些共享相同代码库的小部件,因此我引入了一个提供这些共享成员和方法的抽象类,并创建了一个添加其他功能的实现。但每次我想将它添加到VStack时我都会收到以下错误:

java.lang.AssertionError: A widget that has an existing parent widget may not be added to the detach list

为了验证这是否是我在方法中创建的类层次结构的b / c,但我仍然收到相同的错误。下面的代码应该描述我想要实现的目标。

public class Test extends VStack {
  // constructor that adds button and a clickhandler for the button 
  // that will call addComplex()
  public void addComplex() {
    HStack stack = new HStack();
    stack.setHeight("22px");
    stack.addMember(new IButton("remove"));
    stack.addMember(new ListBox());
    DynamicForm form = new DynamicForm();
    form.setFields(new TextItem());
    stack.addMember(form);
    addMember(stack);
  }
}

当我打电话时

addMember(new Label(""));

我没有错误。

此外,考虑到方法addComplex中的东西是在一个单独的类中,并且我在此Test类的构造函数中添加了一个新实例,不会抛出任何错误。只有当我想通过单击按钮添加HStack时才会抛出错误

为什么我不能将这个HStack添加到我的VStack中?

更新

它是 ListBox 的b / c,它是一个GWT组件,没有SmartGWT组件。这是我错过的细节。

任何人都可以告诉我:为什么GWT小部件是现有的父级,而SmartGWT小部件却没有?或者错误信息只是虚假的?

2 个答案:

答案 0 :(得分:0)

问题是 ListBox 来自GWT,而不是SmartGWT。用适当的SmartGWT小部件替换它就像魅力一样。

答案 1 :(得分:0)

我发现,作为一般规则:

如果您在基本显示小部件之外寻求功能,则不应混用GWT和SmartGWT。

我在尝试隐藏/显示包含一些普通GWT小部件的DynamicFormVLayout时遇到了同样的异常...页面加载正常,但是当我尝试时遇到了麻烦添加一些隐藏/显示交互功能......