2011-02-07 14 views
1

私はMenuBarを使用して、表示パネルをDeckPanelでスワップしようとする初心者です。GWT:MenuBarからDockLayoutPanelへの参照を取得する

  • ApplicationUi.java
  • ApplicationUi.ui.xml
  • ApplicationMenu.java
  • ApplicationMenu.ui.xml

は、私は2クラスと2つの関連するUiBinderサンプルメッセージのXMLファイルを持っています

ApplicationUi.javaとUI XMLでは、ルートはDockLayoutPanelにバインドされています。 ApplicationMenuは、DockLayoutPanelのNorthセクションに配置されています。メニューバーのオプションは、センターセクションのDeckPanelに影響します。

ApplicationMenuでは、表示パネルをスワップするためにshowWidget()を呼び出すことができるように、DeckPanelへの参照を取得するにはどうすればよいですか?

また、私はnewbですので、このコードの提案やレビューは大歓迎です。私はGoogleで可能な限りベストを尽くしましたが、探しているものの多くは外に出ていないようです。

(これはReplace GWT DockLayoutPanel Contentsのフォローアップです)。

出典: ApplicationUi.java

import org.jason.datacenter.client.forms.NewRequirementForm; 

public class ApplicationUi extends Composite { 

private static final Binder binder = GWT.create(Binder.class); 

interface Binder extends UiBinder<Widget, ApplicationUi> { 
} 

@UiField DockLayoutPanel dlp; 
@UiField VerticalSplitPanel headerPanel; 
@UiField DeckPanel deckPanel; 

public ApplicationUi() { 
    initWidget(binder.createAndBindUi(this)); 

    // add the NewRequirementForm to the deckpanel as index #0 
    deckPanel.add(new NewRequirementForm()); 
} 

public void switchDeck(int newIndex) { 
    deckPanel.showWidget(newIndex); 
} 
} 

ApplicationUi.ui.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!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> 
    .panel { 
     background-color: ivory; 
    } 
</ui:style> 


<g:DockLayoutPanel ui:field="dlp"> 
    <g:north size="800"> 
     <g:VerticalSplitPanel ui:field="headerPanel"> 

     </g:VerticalSplitPanel> 
    </g:north> 
    <g:center> 
     <g:DeckPanel ui:field="deckPanel" /> 
    </g:center> 
</g:DockLayoutPanel> 

</ui:UiBinder> 

ApplicationMenu.java:

public class ApplicationMenu extends Composite { 

private static final Binder binder = GWT.create(Binder.class); 

interface Binder extends UiBinder<Widget, ApplicationMenu> { 
} 

@UiField MenuBar applicationMenu; 
@UiField MenuItem mitmNewPower; 

public ApplicationMenu() { 
    initWidget(binder.createAndBindUi(this)); 

    mitmNewPower.setCommand(new Command() { 

     @Override 
     public void execute() { 
      RootLayoutPanel rlp = RootLayoutPanel.get(); 
      DockLayoutPanel dlp = (DockLayoutPanel) rlp.getWidget(0); 

     } 
    }); 
} 

}

のAp plicationMenu.ui.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!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> 
    .panel { 
     background-color: ivory; 
    } 
</ui:style> 

<g:MenuBar ui:field="applicationMenu"> 
    <g:MenuItem> 
     Process 
     <g:MenuBar> 
      <g:MenuItem ui:field="mitmNewPower" /> 
     </g:MenuBar> 
    </g:MenuItem> 

</g:MenuBar> 

</ui:UiBinder> 
+0

GWTを使ってMVPを使っているときに長い答えを書きました。その中のいくつかのアイデアを使って、あなたがしようとしていることを達成するのに役立ちます。 http://stackoverflow.com/questions/2832779/is-there-a-recommended-way-to-use-the-observer-pattern-in-mvp-using-gwt/2832919#2832919 –

答えて

2

これを行うには、EventBusを使用することをお勧めします。イベントタイプを作成し、ApplicationMenuがメニューアイテムがクリックされたときにそのタイプのイベントを発生させます。 ApplicationUiオブジェクトは、そのイベントにサブスクライブし、DeckPanelの内容を更新することによってそれに応答することができます。これにより、DeckPanelについて知る必要のあるメニューオブジェクトはまったく必要ありません。

関連する問題