GWT 应用,第 1 部分: 使用 Google Web Toolkit 实现 places 应用程序
2009-10-08 00:00:00 来源:WEB开发网顾名思义,复合小部件是由其他小部件组成的小部件。地址表格包括一个 Grid,其中填充了一些标签、文本框和一个按钮。在构建地址表格时,需要提供在按钮上显示的文本以及按钮的单击处理程序。
地址表格是对某个地址的可重用描述,您可以向它附加一些功能。在本例中,该功能是在 places 应用程序中使用一个事件处理程序实现的。
事件处理程序
places 应用程序有两个事件处理程序:一个用于在您从地址列表框中选择地址时填充地址表格,另一个用于在您单击地址表格的 Show 按钮时创建一个窗口。这两个事件处理程序都显示在清单 9 中,它是 清单 1 的更新版本:
清单 9. Places.java, take 3
package com.clarity.client;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.HorizontalSplitPanel;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.RootPanel;
public class Places implements EntryPoint {
final ListBox addresses = new ListBox();
final HorizontalSplitPanel hsp = new HorizontalSplitPanel();
final ArrayList<Address> addressList = new ArrayList<Address>();
final AddressGrid addressGrid = new AddressGrid("Show", new ShowPlaceHandler());
public void onModuleLoad() {
hsp.add(addresses);
hsp.add(addressGrid);
hsp.setSplitPosition("175px");
getAddresses();
addresses.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent e) {
addressGrid.setAddress(addressList.get(addresses.getSelectedIndex()));
}
});
RootPanel.get().add(hsp);
}
public void getAddresses() {
AddressServiceAsync as = (AddressServiceAsync) GWT
.create(AddressService.class);
as.getAddresses(new AsyncCallback<List<Address>>() {
public void onFailure(Throwable caught) {
GWT.log("Can't access database", caught);
}
public void onSuccess(List<Address> result) {
Iterator<Address> it = result.iterator();
while (it.hasNext()) {
Address address = it.next();
addresses.addItem(address.getAddress());
addressList.add(address);
}
addresses.setVisibleItemCount(result.size());
addressGrid.setAddress(addressList.get(0));
}
});
}
private class ShowPlaceHandler implements ClickHandler {
private String[] urls;
public void onClick(ClickEvent event) {
final WeatherServiceAsync ws = (WeatherServiceAsync)
GWT.create(WeatherService.class);
final MapServiceAsync ms = (MapServiceAsync) GWT.create(MapService.class);
final Address address = addressGrid.getAddress();
addressGrid.getButton().setEnabled(false);
ms.getMap(address.getAddress(), address.getCity(), address.getState(),
new AsyncCallback<String[]>() {
public void onFailure(Throwable arg0) {
Window.alert(arg0.getMessage());
}
public void onSuccess(final String[] urls) {
addresses.setEnabled(true);
ws.getWeatherForZip(address.getZip(), true,
new AsyncCallback<String>() {
public void onFailure(Throwable arg0) {
Window.alert(arg0.getMessage());
done();
}
public void onSuccess(String weatherHTML) {
PlaceDialog dialog = new PlaceDialog(addressGrid.getAddress(),
urls, weatherHTML);
dialog.setPopupPosition(200, 200);
dialog.show();
done();
}
});
}
});
}
private void done() {
addressGrid.getButton().setEnabled(true);
}
}
}
- ››应用云平台的可用性——从新浪SAE看云平台设计
- ››应用程序的配置管理Poco
- ››应用WebSphere MQ V6 来构建企业信息总线的行业示...
- ››应用 Python 解决一些实际问题
- ››应用JScript和XML自定义无刷新多级联动菜单
- ››应用:C/C++获取本机IP地址
- ››应用程序开发者偏好苹果也关注Android
- ››应用软件视频会议中的几个常见问题
- ››部分 WM6.5 手机有望升级到 Windows Phone 7
- ››应用 RSA 实现 EMF 的开发
- ››GWT 应用,第 1 部分: 使用 Google Web Toolkit 实...
- ››应用程序控制:强大的微软AppLocker
更多精彩
赞助商链接