WEB开发网
开发学院软件开发Java GWT 应用,第 1 部分: 使用 Google Web Toolkit 实... 阅读

GWT 应用,第 1 部分: 使用 Google Web Toolkit 实现 places 应用程序

 2009-10-08 00:00:00 来源:WEB开发网   
核心提示: 顾名思义,复合小部件是由其他小部件组成的小部件,GWT 应用,第 1 部分: 使用 Google Web Toolkit 实现 places 应用程序(10),地址表格包括一个 Grid,其中填充了一些标签、文本框和一个按钮, 事件处理程序places 应用程序有两个事件处理程序:一个用于在您从

顾名思义,复合小部件是由其他小部件组成的小部件。地址表格包括一个 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); 
  } 
 } 
}

上一页  5 6 7 8 9 10 

Tags:GWT 应用 部分

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接