2011-09-17 5 views
2

私はVertiacalパネルオブジェクトを持っており、このオブジェクトは、多くのラジオボタンGWTは、コンポーネント

は、だから私はVertiacalパネルオブジェクトを介して、それらのRadioButtonオブジェクトを取得することができます含まれているを取得します。

多分、繰り返しまたは?

private void initCourse() { 
    coursePopupPanel.clear(); 
    VerticalPanel verticalPanel = new VerticalPanel(); 
    coursePopupPanel.setWidget(verticalPanel); 
    JsArray<JCourse> jCourseArray = JCourse.getList(stringMainData); 
    for (int i = 0; i < jCourseArray.length(); i++) { 
     final RadioButton courseRadioButton = new RadioButton("course"); 
     courseRadioButton.setText(jCourseArray.get(i).getName()); 
     courseRadioButton.getElement().setId(jCourseArray.get(i).getView()); 
     verticalPanel.add(courseRadioButton); 

     //handler of course radio buttons 
     courseRadioButton.addClickHandler(new ClickHandler() { 
      public void onClick(ClickEvent event) { 
      } 
     }); 
    } 
} 

私はcoursePopupPanelへの参照があります。しかし私はverticalパネルを参照していないので、coursePopupPanelへの参照を保持するvertical panel sonceの要素を得ることができます。

答えて

5

GWT VerticalPanelは、複数の子ウィジェットを含むパネルの抽象クラスであるComplexPanelのサブクラスです。 ComplexPanel(そしてVerticalPanelによって継承される)では、子ウィジェットの数を取得したり、インデックスを使ってウィジェットへの参照を取得したりするメソッドです。

Iterator<Widget> vPanelWidgets = myVerticalPanel.iterator(); 
while (vPanelWidgets.hasNext()){ 
    Widget childWidget = vPanelWidgets.next(); 
    if (childWidget instanceof RadioButton) { 
    ...do stuff 
    } 
} 

私はそのメンバーのためにウィジェットをクエリしない傾向があります。あなたの例に従って、RadioButtonをどのように表示するかについて私が決めた決定に結びついています。後で、FlexTableのセルにラジオボタンを表示して、縦と横の配置を制御することを決定したらどうなりますか?その変更を行うと、ウィジェットのイテレーターは機能しません。 FlexTableはPanelですが、ComplexPanelではありません。上記のコードは、VerticalPanelをFlexTableに置き換えることにした場合には機能しません。

このアプローチのようなものを取っていたら、関連するウィジェットのリスト(ラジオボタンのグループのようなもの)を何らかのJava Collectionに保存します。私はそのコレクションを私のプレゼンテーションクラスに渡し、そこにレイアウトを行うためのコードを書いています。通常、これはUiBinderクラスで、これらのRadioButtonの "@UiField(提供= true)"となります。発表者のコードは、渡されたCollectionのRadioButton要素を、UiBinderレイアウトのRadioButtonのUiFieldプレースホルダに関連付けます。だから私のレイアウトの決定はすべて実際にはUiBinder XMLファイルにあります。縦型パネルを取り除いてFlexTableに置き換えることにした場合、正しく分割されていると仮定して、Javaコードの1行に触れる必要はありません。

[実際には、プレゼンテーションレイヤー内で、特にXMLファイル内でRadioButtonを使用することを決心していました。そのプレゼンテーションクラスは、EventBusでRadioButton ValueChangeHandler経由で選択したことを示すメッセージを表示し、FlexTableのVerticalPanelまたはToggleButtonsでRadioButtonを使用するかどうかは気にしません。]

+0

http:// stackoverflowをご覧ください。com/questions/14290240/gwt-retrieve-components-from-formpanel-verticalpanel-which-are-added-dynamicall – Dipak

0

具体的なものではなく、詳細やコード例を追加してください。

私はあなたがここで言うことを推測しようとしています:あなたはverticalPanelオブジェクトを持っています。これに複数のradioButtonオブジェクトを追加します。後でそれらのradioButtonオブジェクトを検索したい(おそらく、選択されているかどうかをチェックするため)、そうですか?これを行うにはいくつかの方法があります。いずれにせよ、なぜあなたはここにGWTのショーケースサイトのコード例は確認されません。

http://gwt.google.com/samples/Showcase/Showcase.html?locale=en_UM#!CwRadioButton

それは視覚的な例のトンを持っている、付属のコードとCSSでそれぞれ。

0

PopupPanelはHasOneWidgetインターフェイスcoursePopupPanel.getWidget()あなたのverticalPanelへの参照を取得することができます。ウィジェットを簡単に繰り返し使用してください。

for (Widget w : verticalPanel){ 
    //Do Stuff 
}