我正在使用GWT 2.5.0创建一个网页,在此我使用了大量的复合组件。网页是基于XML开发的。
所以在这里我们解析XML并根据每个元素将组件添加到VerticalPanel,最后将其添加到FormPanel,然后将其返回以添加到RootPanel。除了组件对应XML之外,我添加一个Button,将其命名为提交按钮,在其click事件上我想获取该表单中每个组件的值。 为了清楚我的想法,下面是我工作的伪代码:
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;
}
任何见解都将受到赞赏。 更新: 这里我将每个子窗口小部件组件与我的一个Composite组件进行比较,与所有Composite组件相比,我是否必须这样做?我有什么简单或优化的方法吗? 我想要这个过程有很好的解决方案,因为那里有很多复合组件:
if(childWidget instanceof ABC ){
ABC xx = (ABC )childWidget;
values = String.valueOf(xx.getMagnitude());
}
答案 0 :(得分:2)
您可以使所有Composite组件实现具有单个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();
}
}
如果需要返回字符串以外的值,可以使用泛型。看一下GWT com.google.gwt.user.client.ui.HasValue
的一个例子(您也可以使用该界面而不是创建自己的界面)。
答案 1 :(得分:0)
您只能在GWT FormPanel小部件中添加一个小部件,然后您可以使用getWidget()
方法获取它:
FormPanel panel = createFormWithComponents();
RootPanel.get().add(panel);
VerticalPanel vp = (VerticalPanel) panel.getWidget();
int widgetCount = vp.getWidgetCount();
Window.alert(widgetCount+" ...");