gwt-ui: binder: поправьте мой код пожалуйста - PullRequest
0 голосов
/ 19 декабря 2011

Мне нужна помощь с кодом gwt (ui: binder).Я хотел бы добавить содержимое элемента div в центр моей DockLayoutPanel

Интересная часть моего html-файла:

  ...     
  <body>
        <div id="Browser"></div>
  </body>  
  ...

Мой ui.xml:

    <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
    xmlns:g="urn:import:com.google.gwt.user.client.ui">
    <ui:style>
        .westPanel {
            background-color: #00FFFF;
        }
        .northPanel {
            background-color: #FF0000;
        }
        .southPanel {
            background-color: #FFFF00;
        }
        .centerPanel {
            background-color: #FFFFFF;
        }
    </ui:style>
     <g:DockLayoutPanel unit='EM'>
       <g:north size='8'>
         <g:FlowPanel styleName="{style.northPanel}">
           <g:Label>NORTH panel</g:Label>
         </g:FlowPanel>
       </g:north>
       <g:west size='5'>
         <g:FlowPanel styleName="{style.westPanel}">
           <g:Label>Navigation panel</g:Label>
           <g:ListBox ui:field='listBox' visibleItemCount='5'/>
         </g:FlowPanel>
       </g:west>
       <g:center>
         <g:FlowPanel styleName="{style.centerPanel}">  

<!--             <g:HTMLPanel>  -->
<!--             <div id="Browser"> -->
<!--            </div> -->
<!--             </g:HTMLPanel> -->

         </g:FlowPanel>
       </g:center>
        <g:south size="5">
         <g:FlowPanel styleName="{style.southPanel}">
           <g:Label>SOUTH panel</g:Label>
         </g:FlowPanel>
        </g:south>
     </g:DockLayoutPanel>
</ui:UiBinder>

Мой класс владельца:

public class MyDockLayoutPanel extends Composite {

private static MyDockLayoutPanelUiBinder uiBinder = GWT
        .create(MyDockLayoutPanelUiBinder.class);

@UiField ListBox listBox;

interface MyDockLayoutPanelUiBinder extends
        UiBinder<Widget, MyDockLayoutPanel> {
}

public MyDockLayoutPanel() {
    initWidget(uiBinder.createAndBindUi(this));
}

public MyDockLayoutPanel(String... paths ) {
    initWidget(uiBinder.createAndBindUi(this));
    for (String path : paths) {
        listBox.addItem(path);
    }
}    
}

Это не сработало для меня:

public class HelloUiBinder implements EntryPoint {

     public void onModuleLoad() {

         RootLayoutPanel.get().add(new MyDockLayoutPanel());
         MyDockLayoutPanel mydocklayoutpanel = new MyDockLayoutPanel("able","baker","charlie");

         MyDockLayoutPanel mydocklayoutpanelID = new MyDockLayoutPanel();

         RootPanel.get("Browser").add(mydocklayoutpanelID);

         RootLayoutPanel.get().add(mydocklayoutpanelID);
         RootLayoutPanel.get().add(mydocklayoutpanel); 
     }
}

Как я могу добавить "Браузер" в центр моей панели mydocklayoutpanel?Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 20 декабря 2011

Попробуйте использовать Document.get().getElementById() и HTMLPanel.wrap() [1], чтобы получить свой div в качестве виджета, а затем переместите его на свою панель DockLayoutPanel (просто добавьте его как дочерний элемент)

[1] http://google -web-toolkit.googlecode.com / svn / javadoc / latest / com / google / gwt / пользователь / клиент / пользовательский интерфейс / HTMLPanel.html # wrap (com.google.gwt .dom.client.Element )

0 голосов
/ 20 декабря 2011

Обычно виджеты добавляются в div, а не наоборот. Таким образом, вы можете создать виджет, который обернет «браузер», используя HTMLPanel, а затем добавить его в MyDockLayoutPanel, вот пример:

Browser.ui.xml

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<ui:style>
   <g:HTMLPanel>  

   </g:HTMLPanel> 

Browser.java

public class BrowserPanel extends Composite {
   private static BrowserPanelUiBinder uiBinder = 
   GWT.create(BrowserPanelUiBinder.class);
   interface BrowserPanelUiBinder extends   UiBinder<Widget, BrowserPanelPanel> {}

   public BrowserPanel() {
   initWidget(uiBinder.createAndBindUi(this));
   }
}    

Точка входа

public class HelloUiBinder implements EntryPoint {
 public void onModuleLoad() {
 MyDockLayoutPanel mydocklayoutpanel = new MyDockLayoutPanel    ("able","baker","charlie");
 mydocklayoutpanel.addWidget(new BrowserPanel());
 RootPanel.get().add(mydocklayoutpanel);
 }

}

В MyDockLayoutPanel.ui.xml измените FlowPanel

<g:center>
 <g:FlowPanel styleName="{style.centerPanel}" ui:field="browser"> 
    </g:FlowPanel>
</g:center>

в MyDockLayoutPanel.java add:

@UiField FlowPanel browser;    
    ...      
    public void addWidget(Widget widget){
    browser.add(widget);
    }
...