7.5 使用与自定义GWT控件.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7.5 使用与自定义GWT控件 通过自定义控件,可以极大地扩展GWT程序界面,还能封装常用的界面功能,以便在其他项目中重用。GWT开发自定义控件并不复杂,本节将带领大家一同开发一个可以编辑的下拉框。 有时候我们希望下拉框既能通过下拉框选择预定值,又能让用户输入值。但是在HTML中并不提供这样的元素,GWT也没有提供这样的控件。在这种情况下,我们就可以通过自定义控件进行扩展。本节的这个自定义控件取名为ComboInput,支持通过AddItem()添加可选项,当用户选择一个项目时,会触发SelectedEvent事件。 我们先来了解一下ComboInput的静态类结构,如图7-21所示。 图 7-21 ComboInput类图 从通用性考虑,我们首先实现一个TriggerInput抽象类,它实现了通用的带下拉选项的输入框控件。我们将ComboInput派生于TriggerInput控件。如果将来我们被要求开发一个既可以让用户选择,又可以输入的日期控件,那么我们就可以直接从TriggerInput类派生。 TriggerInput派生于GWT的Composite控件,Composite控件的作用是包装另一个控件,它隐藏被包装控件的成员函数及其行为。我们的TriggerInput是由输入框和下拉按钮这两个控件组成的,所以我们需要用Composite类隐藏输入框和按钮的行为。 当用户选择了控件中的某一项时,我们需要触发一个自定义事件——Selected。按照GWT的事件模型,我们添加一个HasSelectedHandler接口类。HasSelectedHandler接口类有一个成员函数addSelectedHandler(),通过这个函数我们可以注册Selected事件句柄。 当用户单击ComboInput的下拉按钮时,会弹出一个待选列表。我们用另一个自定义控件ListBox作为弹出列表。同样,ListBox也实现了HasSelectedHandler接口。 ListBox由一系列ListBoxItem组成。ListBoxItem是普通的HTML元素,我们可以在ListBoxItem中嵌入图片或文字,也可以是两者的组合。ListBoxItem的构造函数可以接受一个DataItem作为参数。DataItem在这里作为一个可扩充点,如果需要动态加载下拉选项时,以后从远程服务器获取DataItem列表,然后动态装载到ListBoxItem中。我们将ListBox类派生于ScrollPanel,因为当ListBox中有很多选项时,ListBox需要通过滚动条进行滚动。 考虑DataItem是一个多用途的数据容器。除了这里用到的ComboInput,如果以后还要扩展Grid这样的控件,我们都可以用DataItem承载数据。所以在DataItem内部用Map结构保存数据,Map的key是数据项的名称,类型为String;value是数据项的值,类型为Object,如代码清单7-23所示。 代码清单7-23 DataItem 1 package chapter8.widget.client; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 public class DataItem{ 7 private Map<String,Object>data; 8 9 public DataItem(){ 10 data=new HashMap<String,Object>(); 11 } 12 13 @SuppressWarnings(unchecked) 14 public<T>T get(String name){ 15 return(T)data.get(name); 16 } 17 18 public void set(String name,Object value){ 19 data.put(name,value); 20 } 21 } 在这里我们用了点小【技巧】,把get()函数的返回值做了泛型处理。避免了调用者将get()函数返回的Object转换成它所需要的数据类型。当然,对泛型Map进行强制类型转换会产生【警告】,所以这里要加上一个@SuppressWarnings(unchecked)以避免编译器的【警告】。 ListBoxItem是ListBox中的可选项。我们用GWT中的HTML类实现ListBoxItem,如代码清单7-24所示。 代码清单7-24 ListBoxItem 1 package chapter8.widget.client; 2 3 import com.google.gwt.user

文档评论(0)

tt435678 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档