开发者

Gwt get Components

开发者 https://www.devze.com 2023-04-05 08:29 出处:网络
I have a Vertiacal panel object and This object contains many radiobuttons So can i get those radioButton objects throughVertiacal panel object.

I have a Vertiacal panel object and This object contains many radiobuttons

So can i get those radioButton objects through Vertiacal panel object.

Maybe via iteration or ?

private void initCourse() {
    coursePopupPanel.clear();
    VerticalPanel verticalPanel = new VerticalPanel();
    coursePopupPanel.setWidget(verticalPanel);
    JsArray<JCourse> jCourseA开发者_高级运维rray = 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) {
            }
        });
    }
}

I have a reference to coursePopupPanel. but i have not reference to vertical panel, so can i get elements of vertical panel sonce holding reference to coursePopupPanel.


A GWT VerticalPanel is a subclass of ComplexPanel, an abstract class for Panels that contain more than one child widget. In ComplexPanel (and so inherited by VerticalPanel) are methods for getting the number of child widgets, getting references to them by index, and so on. You could build an iterator something like this:

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

I tend not to query a widget for its members. That ties me to the decisions I made about how to display the RadioButtons, following your example. What if you decide later to display your radio buttons in the cells of a FlexTable in order to control vertical and horizontal arrangement? To make that change means your widget iterator won't work. FlexTable is a Panel but not a ComplexPanel. The code I wrote above won't work if you decide to replace the VerticalPanel with a FlexTable.

If was to take something like this approach, I would keep my lists of related widgets (like a group of RadioButtons) in some sort of Java Collection. I pass that Collection to my presentation class, and inside there I write the code to do the layout. Usually that's a UiBinder class, with "@UiField(provided = true)" for these RadioButtons. The code in the presenter then associates the RadioButton elements of the Collection I passed in to the UiField placeholders for the RadioButtons in the UiBinder layout. So all my layout decisions are actually in the UiBinder xml file. If I decide to rip out my Vertical Panel and replace it with a FlexTable, I might not have to touch a single line of Java code, assuming I separated things out correctly.

[Actually, I would probably keep my decision to use RadioButtons inside the presentation layer, and inside the XML file in particular. That presentation class would fire a message on the EventBus to indicate the user had made a selection via a RadioButton ValueChangeHandler, and I wouldn't care if I used RadioButtons in a VerticalPanel or ToggleButtons in a FlexTable.]


You're not being to specific, add more details and maybe a code example.

I'm gonan try to guesstimate what you're trying to say here: You have a verticalPanel object. To it you add several radioButton objects. Later you want to retrive those radioButton objects (to maybe check if they're selected or not), right? There's several ways to do this. At any rate, why don't you check the code examples at the Gwt Showcase site here:

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

it has tons of visual examples, each with the attached code and css.


Since PopupPanel implements HasOneWidget interface you can coursePopupPanel.getWidget() to get a reference to your verticalPanel. And iterate widgets in it simply using

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号