0

UiBinder の使用に関するチュートリアルに取り組み、チュートリアルの最後のセクションで説明したように、LazyPanel を利用しようとしました。

私には、チュートリアルが、要素を LazyPanel にラップするだけで十分に機能することを暗示しているように思えます。ただし、このプロジェクトをコンパイルして実行しようとすると、GWT コンパイラーが不平を言い、次のように伝えます。

Rebind result 'com.google.gwt.user.client.ui.LazyPanel' cannot be abstract

UiBinder を使用して LazyPanel を使用するにはどうすればよいですか? 私の設定に何か問題がありますか、それとも何が欠けていますか?

私はGWT 2.4を使用しています(これは最新の安定版リリースです)。

--

編集:これが私が使用しているXMLです:

<?xml version="1.0" encoding="UTF-8"?>
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
    xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:s="urn:import:de.dfv.yankee.client.tabs.start"
    xmlns:b="urn:import:de.dfv.yankee.client.tabs.bewerber" xmlns:f="urn:import:de.dfv.yankee.client.tabs.firmen"
    xmlns:k="urn:import:de.dfv.yankee.client.tabs.kommunikation" xmlns:a="urn:import:de.dfv.yankee.client.tabs.admin"
    xmlns:v="urn:import:de.dfv.yankee.client.tabs.abrechnung" xmlns:u="urn:import:de.dfv.yankee.client.tabs.user"
    xmlns:svg="urn:import:org.vectomatic.dom.svg.ui">

    <ui:with field="svgBundle" type="de.dfv.yankee.client.tabs.Tabs.SVGBundle" />

    <g:TabLayoutPanel barUnit="PX" barHeight="30"
        ui:field="tabs">

        <g:tab>
            <g:header>Start</g:header>
            <s:StartTab ui:field="startTab" />
        </g:tab>

        <g:tab>
            <g:header>Bewerber</g:header>
            <b:BewerberSucheTab ui:field="bewerberSucheTab" />
        </g:tab>

        <g:tab>
            <g:header>Bewerber Ergebnis</g:header>
            <g:HTMLPanel>
                <svg:SVGImage ui:field="svgImage" resource="{svgBundle.plz}" />
            </g:HTMLPanel>
        </g:tab>

        <g:tab>
            <g:header>Firmen</g:header>
            <g:LazyPanel>
                <f:FirmenSucheTab ui:field="firmenSucheTab" />
            </g:LazyPanel>
        </g:tab>

        <g:tab>
            <g:header>Firma Ergebnis</g:header>
            <g:HTMLPanel>

            </g:HTMLPanel>
        </g:tab>

        <g:tab>
            <g:header>Kommunikation</g:header>
            <k:KommunikationsTab ui:field="kommunikationsTab" />
        </g:tab>

        <g:tab>
            <g:header>Abrechnung</g:header>
            <v:VermittlungenTab ui:field="vermittlungenTab" />
        </g:tab>

        <g:tab>
            <g:header>Userverwaltung</g:header>
            <u:UserTab ui:field="userTab" />
        </g:tab>

        <g:tab>
            <g:header>Admin</g:header>
            <a:AdminTab ui:field="adminTab" />
        </g:tab>

    </g:TabLayoutPanel>

</ui:UiBinder>
4

1 に答える 1

1

編集開始

正しい解決策は次のとおりです。

<g:TabLayoutPanel barHeight="2" barUnit="EM" width="250px" height="150px">
  <g:tab>
    <g:header>T1</g:header>
    <t:MyLazyPanel1 />
  </g:tab>
  <g:tab>
    <g:header>T2</g:header>
    <t:MyLazyPanel2 />
  </g:tab>
</g:TabLayoutPanel>

MyLazyPanel1:

public class MyLazyPanel1 extends LazyPanel {
  Label l = new Label("label1");
  @Override
  protected Widget createWidget() {
    System.out.println("now1");
    return l;
  }
}

MyLazyPanel2:

public class MyLazyPanel2 extends LazyPanel {
  Label l = new Label("label2");
  @Override
  protected Widget createWidget() {
    System.out.println("now2");
    return l;
  }
}

これで、アプリケーションの起動時にコンソールに「now1」が表示され、2 番目のタブをクリックすると「now2」が表示されます。

編集終了

これは機能します:

<g:TabLayoutPanel barHeight="2" barUnit="EM" width="250px" height="150px">
  <g:tab>
    <g:header>T1</g:header>
    <t:MyLazyPanel>
      <g:Label>ABC</g:Label>
    </t:MyLazyPanel>
  </g:tab>
  <g:tab>
    <g:header>T2</g:header>
    <t:MyLazyPanel>
      <g:Label>123</g:Label>
    </t:MyLazyPanel>
  </g:tab>
</g:TabLayoutPanel>

どこMyLazyPanelにある:

public class MyLazyPanel extends LazyPanel {
  @Override
  protected Widget createWidget() {
    return null;
  }
}

しかし、それが本当に怠惰にロードされているかどうかはわかりません

...少なくともコンパイルされ、結果はexpextedのように見えます

ここを見てください: http://google-web-toolkit.googlecode.com/svn/javadoc/2.4/com/google/gwt/user/client/ui/LazyPanel.html

于 2012-04-20T13:05:38.150 に答える