0

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 ファイル内で作成したレイアウトは適用されません。どこで間違ったのですか?

4

2 に答える 2

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

とにかく、ウィジェットの構造を変更することはできません。あなたはその定義に縛られています。

于 2013-03-21T23:48:47.430 に答える
0

よくわかりませんが、 asWidget() メソッドを実装していないことが原因である可能性があります。

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

ウィジェットが宣言されている場所:

private final Widget widget;

コンストラクターで次のように初期化されます。

widget = ui.createAndBindUi(this);

お役に立てれば

于 2013-03-21T13:23:46.590 に答える