我们还记得ITreeTableAdapter接口的方法getBackgroundColor,如图12所示,该方法就是要返回特定数据行的背景色,目前为止,EmployeeTreeTableAdapter的该方法没有实现具体的逻辑,我们将这里演示如何给特定的行数据增加背景色, 我们需要给EmployeeTreeTableAdapter 增加清单16中的代码。。
图12:ITreeTableAdapter的接口

清单16:EmployeeTreeTableAdapter中增加的代码
| private Color depColor=new Color(null, 255,00,00); public Color getBackgroundColor(Object element) { if(element instanceof Department) return depColor; else return null; } |
此外还需要在TreeTable中的setInput方法中做一些修改,代码见清单17。
清单17:TreeTable的代码变更
| public void setInput(Object[] inputs){ if(treeViewer!=null) treeViewer.setTableInput(inputs); initColumnBGColorProperty(); } private void initColumnBGColorProperty() { TreeItem[] items = getTree().getItems(); for (int i = 0; i < items.length; i++) { TreeItem item = items[i]; Color rowItemBGColr =adapterFactory.getAdapter(item.getData()).getBackgroundColor(item.getData()); if(rowItemBGColr!=null) item.setBackground(rowItemBGColr); } } |
此时运行测试窗口,我们成功的给部门行增加了红色背景色,效果见图13。读者可以预料到,一旦需求发生变化,例如需要给某个特定的雇员以特别的颜色显色,我们可以快速的定位到EmployeeTreeTableAdapter,简单的修改getBackgroundColor方法就可以,可见细粒度的控制可以快速的定位代码,灵活的响应变化。
图13:部门行增加背景色的界面效果
因此可以了解到,在这样一种体系结构下,我们的代码可以很容易的扩展去精确控制TreeTable的行为,并且在扩展之后仍然保持很清晰,简洁的体系结构。由于我们集中的控制各个方面的变化,我们的扩展是正交的,功能上互相没有影响,代码上也没有重复。如果此时我们还在使用第一部分的代码,如果你有多个TreeTable的实例,恐怕免不了又要重复的拷贝很多的代码。 我们还可以给TreeTable增加了编辑、过滤、菜单、列顺序设置、列隐藏和平面显示等功能,可以在项目中大大的提高开发的效率,限于篇幅,这里不加赘述,有兴趣的读者可以参考本文的内容自行实现。
6. 总结
本文向读者展示了如何编写可重用的用户构件界面,并提供了一个TreeTable的例子,本文的读者可以根据需要自由的扩展,创建功能更为丰富的TreeTable构件。在大型的RCP项目中,系统会中有很多的对象模型,用户界面可能有数十个表格。使用这种可重用的构件,我们可以快速的创建复杂的界面,降低工作量。并且由于设计上的灵活性,可以极大的降低代码的维护成本和需求变更引发的工作量。良好的可扩展性将会使你的应用时刻保持清晰的架构,能够快速响应模型的变化。
通过本文的一些实践,读者也可以思考一下其他方面的可重用性设计,如果你热爱程序员这个工作,就应当不懈的坚持下去,最终期望能够实现“厚集薄发”,将越来越多的冗余代码重构成精简的可重用代码,提高程序质量和可维护性。我们的代码应该看上去和机器生成的一样整齐和简洁,不需要太多额外的注释(细粒度的类名和方法名都是自解释的),每一个类和方法的都是那样的优美、短小而精悍,系统的结构清晰而灵活,不再害怕变化,即使经过很久的演进依然保持良好的结构和旺盛的生命力。这也是我们作为程序员的共同的目标。
巧 巧 读 书:http://www.qqread.com/java/2008/02/r399149.html相关专题
- Eclipse应用技术 (515篇文章)
- J2SE综合:浅谈java程序发布之 jre 篇 (11次浏览)
- JAVA代码中使用魔法数值 (8次浏览)
- Hibernate缓存管理 (6次浏览)
- JAVA代码应该流畅和结构化 (5次浏览)
- Java JVM设置对性能的影响 (4次浏览)
- 开发框架:深入了解 Struts Validator (3次浏览)
- Java中的通信机制及与C/C API的集成 (1次浏览)
- 用Hibernate实现领域对象的自定义字段 (1次浏览)
- Java语言入门 简述Java语言回收机制 (0次浏览)
- 2008年Java开发者最迫切的五个期望 (0次浏览)




