0

私はGWT2.5.0を使用してWebページを作成していますが、ここでは多くの複合コンポーネントを使用しました。そして、WebページはXMLに基づいて開発されています。

したがって、ここではXMLを解析し、各要素に従ってコンポーネントをVerticalPanelに追加し、最後にそれをFormPanelに追加してから、それを返してRootPanelに追加します。コンポーネントがXMLに対応する横に、ボタンを追加し、それを送信ボタンと呼びます。そのクリックイベントで、そのフォームのすべてのコンポーネントの値を取得します。私の考えが何であるかを明確にするために、以下は私の仕事の擬似コードです:

public FormPanel createFormWithComponents(){

    FormPanel fp = new FormPanel();
    vp = new VerticalPanel();
    //these are creatred based on the xml
    ABC coutn = new ABC (null,"pressure count",true);
    PI propotion =  new PI(12.5,"HR percentage");

    vp.add(coutn);
    vp.add(propotion);
    //a common button to every form created here
    Button submit = new Button("submit");
    vp.add(submit);
    submit.addClickHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {

更新しました

                String values = "";
                Iterator<Widget> vPanelWidgets =  vp.iterator();
                while (vPanelWidgets.hasNext()){
                    Widget childWidget = vPanelWidgets.next();
                    if(childWidget instanceof ABC){
                        ABC xx = (ABC )childWidget;
                        values = String.valueOf(xx.getMagnitude());
                    }
                }
                Window.alert(values);
            }
        });

        fp.add(vp);
        return fp;
    }

任意の洞察をいただければ幸いです。更新:ここでは、子ウィジェットコンポーネントのそれぞれをコンポジットコンポーネントの1つと比較していますが、すべてのコンポジットコンポーネントと比較して、このようにする必要がありますか?私はそれを行うための簡単なまたは最適化された方法はありますか?そこには非常に多くの複合コンポーネントがあるので、このプロセスを実行するための優れたソリューションが必要です。

if(childWidget instanceof ABC ){
    ABC xx = (ABC )childWidget;
    values = String.valueOf(xx.getMagnitude());
}
4

2 に答える 2

2

getValue()すべてのコンポジットコンポーネントに、単一のメソッドを持つインターフェイスを実装させることができます。

public interface HasValue {
    public String getValue();
}

次に、そのインターフェイスを実装するすべてのウィジェットの値を簡単に抽出できます。

    while (vPanelWidgets.hasNext()){
        Widget childWidget = vPanelWidgets.next();
        if(childWidget instanceof HasValue){
            HasValue xx = (HasValue) childWidget;
            values = xx.getValue();
        }
    }

文字列以外の値を返す必要がある場合は、ジェネリックを使用できます。com.google.gwt.user.client.ui.HasValueその例については、GWTを見てください(独自のインターフェースを作成する代わりに、そのインターフェースを使用することもできます)。

于 2013-01-12T17:49:11.313 に答える
0

GWT FormPanelウィジェットに追加できるウィジェットは1つだけで、次のgetWidget()メソッドを使用して取得できます。

FormPanel panel = createFormWithComponents();

RootPanel.get().add(panel);

VerticalPanel vp = (VerticalPanel) panel.getWidget();
int widgetCount = vp.getWidgetCount();
Window.alert(widgetCount+" ...");
于 2013-01-12T09:58:04.603 に答える