0

GWT 2.0 がリリースされる前に作成した既存のパネルをやり直そうとしています。このパネルには、いくつかのテキスト フィールドと、下の VerticalPanel 内のスクロール可能なパネルがあります。

私がやりたいのは、UIBinder でスクロール可能なパネルを作成し、それを VerticalPanel に追加することです。以下は、これを説明するために作成した例です。

 public class ScrollTablePanel extends ResizeComposite{

     interface Binder extends UiBinder<Widget, ScrollTablePanel > { }
     private static Binder uiBinder = GWT.create(Binder.class);

     @UiField FlexTable table1;
     @UiField FlexTable table2;

     public Test2() {

      initWidget(uiBinder.createAndBindUi(this));



      table1.setText(0, 0, "testing 1");
      table1.setText(0, 1, "testing 2");
      table1.setText(0, 2, "testing 3");

      table2.setText(0, 0, "testing 1");
      table2.setText(0, 1, "testing 2");
      table2.setText(0, 2, "testing 3");
      table2.setText(1, 0, "testing 4");
      table2.setText(1, 1, "testing 5");
      table2.setText(1, 2, "testing 6");
     }
    }

次にxml:

<ui:UiBinder 
   xmlns:ui='urn:ui:com.google.gwt.uibinder' 
   xmlns:g='urn:import:com.google.gwt.user.client.ui'       
   xmlns:mail='urn:import:com.test.scrollpaneltest'>
       <g:DockLayoutPanel unit='EM'>
      <g:north size="2">
       <g:FlexTable ui:field="table1"></g:FlexTable>
      </g:north>
      <g:center>
       <g:ScrollPanel>
         <g:FlexTable ui:field="table2"></g:FlexTable>
       </g:ScrollPanel>
      </g:center>
    </g:DockLayoutPanel>
</ui:UiBinder>

次に、EntryPoint で次のようにします。

 public void onModuleLoad() {

     VerticalPanel vp = new VerticalPanel();
     vp.add(new ScrollTablePanel());
     vp.add(new Label("dummy label text"));
     vp.setWidth("100%");

     RootLayoutPanel.get().add(vp);
    }

しかし、ScrollTablePanel を VerticalPanel に追加すると、ScrollTablePanel 全体ではなく、最初の FlexTable (test1) のみがページに表示されます。

GWT 2.0 で宣言型レイアウトとプログラム型レイアウトを混在させることが可能な場合に、これを機能させる方法はありますか?

4

1 に答える 1

2

そもそも uiBinder を使用する目的に勝るものはありますが、間違いなく可能です。もちろん、FlexTable などの動的な GUI 要素を使用する必要がある場合、init コードを回避することはできませんが、@UiFactory と @UiField(provided=true) を使用してその一部を回避することはできます。あなたの問題は、コンテナーの VerticalPanel のサイズに関係していると思います。100% に設定してみてください。

于 2010-01-05T12:39:16.990 に答える