Можно ли смешивать декларативный и программный макет в GWT 2.0? - PullRequest
0 голосов
/ 24 декабря 2009

Я пытаюсь переделать существующую панель, созданную до выпуска GWT 2.0. Панель имеет несколько текстовых полей и прокручиваемую панель ниже в вертикальной панели.

Я хотел бы сделать прокручиваемую панель с 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, на странице виден только первый FlexTable (test1), а не весь ScrollTablePanel.

Есть ли способ заставить эту работу работать там, где можно смешивать декларативный и программный макет в GWT 2.0?

1 Ответ

2 голосов
/ 05 января 2010

Вы определенно можете, хотя это своего рода превосходит цель использования uiBinder в первую очередь. Конечно, когда вам приходится использовать элементы графического интерфейса, такие как FlexTable, вы не можете избежать кода инициализации, но вы все равно можете использовать @UiFactory и @UiField (условии = true), чтобы избежать некоторых из них. Я считаю, что ваша проблема связана с размером контейнера VerticalPanel, попробуйте установить его на 100%.

...