GWT:如何将UiBinder xml布局添加到我的Widget?

时间:2013-03-21 13:07:14

标签: gwt

我有一个按钮,它是GWT PushButton的直接后代。我想将UiBInder xml布局添加到我的按钮以简化其设计。我创建了MyButton.ui.xml,我有MyButton的以下内容:

class MyButton extends PushButton 
{

interface UI extends UiBinder<Widget, MyButton>
{
}

private static final UI ui = GWT.create(UI.class);

@UiConstructor
public MyButton() {
        super();
        ui.createAndBindUi(this);
}

(...)

}

问题是我的按钮没有渲染。 GWT创建了一些div并在其中放置了输入元素,但是我在uibinder xml文件中创建的布局未应用。哪里出错了?

2 个答案:

答案 0 :(得分:0)

我不太确定,但是,可能是因为你没有实现asWidget()方法:

@Override
public Widget asWidget() {
    return widget;
}

声明小部件:

private final Widget widget;

并在构造函数中初始化为:

widget = ui.createAndBindUi(this);

希望这有帮助

答案 1 :(得分:0)

要直接回答您的问题,xml必须看起来像(进行必要的调整):

<ui:image field='downButton'/>
<g:PushButton ui:field='pushButton' enabled='true'>
  <g:upFace>
    <b>click me</b>
  </gwt:upFace>
  <g:upHoveringFace>
    <b>Click ME!</b>
  </gwt:upHoveringFace>

  <g:downFace image='{downButton}'/>
  <g:downHoveringFace image='{downButton}'/>
</g:PushButton>

有关语法,请参阅http://google-web-toolkit.googlecode.com/svn/javadoc/2.5/com/google/gwt/user/client/ui/CustomButton.html。 然后,在您的MyButton中,您应该使用标有@UiFactory的方法,以便获取正确的实例以提供UiBinder GWT.create()

@UiFactory
DialogBox thatsJustMe() {
  // UiBinder will call this to get a PushButton instance.
  return this;
}

无论如何,您无法更改窗口小部件的结构。你必须遵守它的定义。