我有一个Vertiacal面板对象,该对象包含许多单选按钮
那么我可以通过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) {
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个对coursePopupPanel的引用.但我没有参考垂直面板,所以我可以获得垂直面板sonce的元素保持对coursePopupPanel的引用.
GWT VerticalPanel是ComplexPanel的子类,ComplexPanel是包含多个子窗口小部件的Panel的抽象类.在ComplexPanel中(由VerticalPanel继承)是获取子窗口小部件数量,通过索引获取对它们的引用等的方法.你可以构建一个像这样的迭代器:
Iterator<Widget> vPanelWidgets = myVerticalPanel.iterator();
while (vPanelWidgets.hasNext()){
Widget childWidget = vPanelWidgets.next();
if (childWidget instanceof RadioButton) {
...do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
我倾向于不为其成员查询小部件.根据你的例子,这与我对如何显示RadioButtons的决定联系在一起.如果您稍后决定在FlexTable的单元格中显示单选按钮以控制垂直和水平排列,该怎么办?要进行更改意味着您的窗口小部件迭代器将无法工作.FlexTable是Panel而不是ComplexPanel.如果您决定使用FlexTable替换VerticalPanel,我上面编写的代码将无效.
如果要采取类似这种方法的东西,我会在某些Java Collection中保留我的相关小部件列表(比如一组RadioButtons).我将该Collection传递给我的表示类,并在那里编写代码来进行布局.通常这是一个UiBinder类,这些RadioButtons的"@UiField(provided = true)".然后,演示者中的代码将传入的Collection的RadioButton元素与UiBinder布局中的RadioButtons的UiField占位符相关联.因此我的所有布局决策实际上都在UiBinder xml文件中.如果我决定撕掉我的垂直面板并用FlexTable替换它,我可能不必触及一行Java代码,假设我把事情分开了.
[实际上,我可能会决定在表示层中使用RadioButtons,特别是在XML文件中.该表示类将在EventBus上触发一条消息,指示用户已经通过RadioButton ValueChangeHandler进行了选择,我不在乎我是否在FlexPaable中的VerticalPanel或ToggleButtons中使用了RadioButtons.