2011-02-04 2 views
1

Я пытаюсь заменить содержимое части CENTER DockLayoutPanel из MenuBar. MenuBar будет сидеть на Севере, но «контент» (формы, отчеты и т. Д.) Будут находиться в Центре.Заменить GWT DockLayoutPanel Содержание

Я думал, что смогу сделать это, захватив всю DockLayoutPanel из RootPanel (индекс 0, так как это единственный виджет, непосредственно привязанный к нему), а затем как-то удалите текущее содержимое центра и вставьте новое. К сожалению, getWidget (int index) не статичен, поэтому он не работает.

Может ли кто-нибудь, как я, с правильным способом сделать это? Неработающий код ниже:

// snipped package and import details 

public class menubar extends Composite { 

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

interface menubarUiBinder extends UiBinder<Widget, menubar> { 
} 

@UiField MenuBar applicationMenuBar; 
@UiField MenuBar processMenuBar; 
@UiField MenuBar reportsMenuBar; 
@UiField MenuItem addPowerRequirementCmd; 
@UiField MenuItem powerUsageReportCmd; 

public menubar() { 
    initWidget(uiBinder.createAndBindUi(this)); 

    // command to replace whatever is in DockLayoutPanel.CENTER w/ AddPowerRequirement 
    // FormPanel 
    addPowerRequirementCmd.setCommand(new Command() { 

     @Override 
     public void execute() { 

      // get DockLayoutPanel from the RootPanel (it's the only widget, should be 
      // index 0 
      DockLayoutPanel dlp = (DockLayoutPanel) RootPanel.getWidget(0); 

      // clear out DockLayoutPanel.CENTER 

      // insert the FormLayoutPanel into DockLayoutPanel.CENTER 
      dlp.add(new PowerRequirementForm()); 
     } 
    }); 

    // command to replace whatever is in DockLayoutPanel.CENTER w/ power usage report 
    powerUsageReportCmd.setCommand(new Command() { 

     @Override 
     public void execute() { 

     } 
    }); 
} 

}

Спасибо!

ответ

4

Используйте атрибут ui:field, как вы делаете для MenuBar, чтобы получить ссылку на DockLayoutPanel из UiBinder:

<g:DockLayoutPanel ui:field="dockPanel"/> 

и в классе:

@UiField DockLayoutPanel dockPanel; 

Однако, это звучит как вы хотите иметь набор виджетов, которые отображаются в центре панели в зависимости от состояния приложения. DeckPanel является лучшим решением для этого:

<g:DockLayoutPanel> 
    <g:center> 
    <g:DeckPanel ui:field="deck"> 
     <g:FlowPanel>Panel #0</g:FlowPanel> 
     <g:FlowPanel>Panel #1</g:FlowPanel> 
    </g:DeckPanel> 
    </g:center> 
</g:DockLayoutPanel> 

А затем переключить отображаемое дочерний DeckPanel:

deck.showWidget(1); // Show Panel #1 
deck.showWidget(0); // Show panel #0 
+0

ли это общее решение, если у вас есть несколько «страниц», которые должны быть показаны ? Я даже не запустил опции меню для большинства административных функций для приложения. – Jason

+0

Да. Вручное добавление/удаление Widgets будет менее ремонтопригодным. –

+0

Хорошо, спасибо. Вопрос помечен как ответ. – Jason

Смежные вопросы