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>

然后在入口点做这样的事情:

 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 时,页面上只有第一个 FlexTable (test1) 可见,而不是整个 ScrollTablePanel。

有没有办法让这项工作在 GWT 2.0 中混合声明式布局和编程布局?

4

1 回答 1

2

你绝对可以,尽管它首先达到了使用 uiBinder 的目的。当然,当您必须使用动态 gui 元素时,例如 FlexTable,您无法避免初始化代码,但您仍然可以使用 @UiFactory 和 @UiField(provided=true) 来避免其中一些。我相信您的问题与容器 VerticalPanel 的大小有关,请尝试将其设置为 100%。

于 2010-01-05T12:39:16.990 回答