Java GWT UiBinder-将新对象指定给UiField引用

Java GWT UiBinder-将新对象指定给UiField引用,java,gwt,uibinder,Java,Gwt,Uibinder,我最近开始在我的一个应用程序中使用GWT。我对UiBinder的使用有疑问。如果我在类中声明了@UiField属性(在.ui.xml中也是如此),那么在构造函数中创建一次该类型的新对象后,我是否可以创建该类型的新对象并将其分配给同一引用 例如,如果my ui.xml文件有一个DockLayoutPanel,其中心有一个PlotWidget public class PlotWidget extends Composite { @UiField (provided = true)

我最近开始在我的一个应用程序中使用GWT。我对UiBinder的使用有疑问。如果我在类中声明了@UiField属性(在.ui.xml中也是如此),那么在构造函数中创建一次该类型的新对象后,我是否可以创建该类型的新对象并将其分配给同一引用

例如,如果my ui.xml文件有一个DockLayoutPanel,其中心有一个PlotWidget

public class PlotWidget extends Composite {

    @UiField (provided = true)
    SimplePlot plot;

    public Constructor() {
        plot = new SimplePlot(someArgument1, someArgument2);
    }

    // some method
    public doSomething() {
        // Is this valid?
        plot = new SimplePlot(someArgument3, someArgument4);    
    }
}
绘图是否仍附着在DockLayoutPanel上?如果没有,我将如何实现创建上述新对象所需的功能


任何指针都将受到欢迎。

在这种情况下,我使用容器来更改小部件

public class PlotWidget {

    @UiField
    SimplePanel plotContainer;

    public Constructor() {
        plotContainer.setWidget(new SimplePlot(someArgument1, someArgument2));
    }

    public doSomething() {
        plotContainer.setWidget(new SimplePlot(someArgument3, someArgument4));    
    }
}

但如果绘图字段上有事件处理程序(由@UiHandler annptation提供),它将无法正常工作。

示例代码中缺少的是ui绑定器创建调用,类似于
initWidget(uiBinder.createAndBindUi(this))。在本例中,在初始化构造函数中的ui字段
plotContainer
后调用此函数。如果要将新实例重新分配给
SimplePlot
,则新实例将不会附加到DockLayoutPanel,如果确实以某种方式替换了现有实例,则还需要重新附加处理程序


解决方案可以是创建一个新的SimplePlot实例,也可以不是创建一个新的SimplePlot实例,而是通过对SimplePlot的方法调用来设置参数。但是,如果创建SimplePlot的唯一方法是通过构造函数,如果您无法控制实现,您可以创建一个单独的uibinder类/小部件来创建SimplePlot,该类/小部件创建SimplePlot并附加处理程序,并通过PlotWidget上的
setWidget
设置新的小部件,如sinicyn所述。

这是否意味着我提到的上述代码有问题?我希望最终合并事件处理程序,所以我怀疑这是否有帮助。很抱歉代码不完整,但我在原始应用程序中使用了
initWidget
方法(整个代码未粘贴在此处)。感谢您确认它没有连接到面板。不知怎的,gflot SimplePlot重画对我来说不起作用,因此需要创建一个新实例。我使用的解决方法是清除docklayoutpanel,并将中心新创建的SimplePlot设置为
panel.add(plot)
,到目前为止效果良好。