2011-09-17 24 views
2

我有一個Vertiacal面板對象,這個對象包含許多單選按鈕GWT獲得組件

所以我可以得到這些RADIOBUTTON通過Vertiacal面板對象的對象。

也許通過迭代或?

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。但我沒有參考垂直面板,所以我可以獲得垂直面板sonce的元素,參考coursePopupPanel。

回答

5

GWT VerticalPanel是ComplexPanel的一個子類,它是包含多個子部件的面板的抽象類。在ComplexPanel中(以及由VerticalPanel繼承的)是用於獲取子窗口小部件的數量,通過索引獲取對它們的引用等的方法。你可以創建一個迭代是這樣的:

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

我傾向於不查詢其成員的Widget。這使我跟隨我的關於如何顯示RadioButton的決定,遵循你的例子。如果您稍後決定在FlexTable的單元格中顯示單選按鈕以控制垂直和水平佈置,該怎麼辦?要做出這種改變意味着你的小部件迭代器將無法工作。 FlexTable是一個面板,但不是一個ComplexPanel。如果您決定用FlexTable替換VerticalPanel,我上面寫的代碼將不起作用。

如果採取類似這種方法,我會在某種Java集合中保留相關小部件(如一組RadioButton)的列表。我將該集合傳遞給我的演示課程,並在那裏編寫代碼來完成佈局。通常這是一個UiBinder類,爲這些RadioButton提供「@UiField(provided = true)」。演示者中的代碼然後將我傳入的Collection的RadioButton元素關聯到UiBinder佈局中的RadioButton的UiField佔位符。所以我所有的佈局決定都在UiBinder xml文件中。如果我決定撕掉垂直面板並將其替換爲FlexTable,則假設我將事情正確分開,則可能不必觸摸一行Java代碼。

[其實,我可能會繼續決定在表示層中使用RadioButton,特別是在XML文件中使用RadioButton。該演示文稿類將在EventBus上觸發一條消息,以指示用戶通過RadioButton ValueChangeHandler進行了選擇,並且我不關心我是否在VerticalPanel中使用RadioButton或在FlexTable中使用了ToggleButtons。]

+0

請問你看看這個問題:http:// stackoverflow。COM /問題/ 14290240/GWT回收 - 組件 - 從-FormPanel中-verticalpanel,其中,被添加,dynamicall – Dipak

0

你不是特定的,添加更多的細節,也可能是一個代碼示例。

我是gonan嘗試猜測你在說什麼:你有一個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 
}