网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.JAVA进阶-如何提升JSP应用程序的.
.消除内存泄漏.
.一个浏览图片程序.
.JBuilder2005实现重构之重命名.
.经典java问题,你能答出几个?.
.用Java+MySQL+PHP轻松构建跨平台.
.Resin的使用和安装.
.纯Java周历的写法.
.为Java应用程序添加退出事件处理.
.用Reflection实现Visitor模式.
.Java编程基础.
.JAR文件揭密.
.Programming a Spider in Java.
.Struts中文帮助.
.JSR 224-Java EE 5 最终草案发布.
.转scjp第一站的首页内容.
.用JFace和SWT构建简单的应用程序.
.自我参考:Java学习的30个目标.
.Java语言深入:对 java.lang 的研.
.澄清Java语言接口与继承的本质.

JFC/Swing活学活用系列之定制JList显示

发表日期:2008-1-5


下载本文源代码

  引言

  在图形用户界面方面(GUI),Java一直无法与C++、PB、Delphi之类抗衡,使用早期Java/AWT包所开发的界面实在是让人不敢恭维。随着JFC/Swing的日趋成熟,开发出与可以与C++媲美的GUI不再是"不可能完成的任务"。除了具有丰富的界面组件之外,以下优秀的特性更让Swing如虎添翼。Swing是以100%纯Java实现的,且辅以JDK 1.1 轻量级UI框架为基础,没有本地代码,独立于操作系统之外,基于MVC设计模式、采用可插入的外观感觉(PL&F),这都让我们忍不住去感受一下她的魅力。

  完整的JFC十分巨大,Swing只是其中的一部分,本文将着重于Swing包中的JList组件以及如何定制显示。

  JList基础知识

  由JList类代表的Swing列表显示一个可选取对象列表,它支持三种选取模式:单选取、单间隔选取、多间隔选取。

  基于MVC的构建思想,JList类不维护对它所显示的那些对象的引用,而是把数据治理工作委托给一个实现ListModel接口的对象;JList类不对其显示对象的选取操作进行跟踪和维护,而是把选取治理的工作委托给一个实现ListSelectionModel接口的对象;JList类不绘制其所显示的对象,而是把列表单元的绘制工作委托给一个实现ListCellRenderer接口的对象。

  JList组件把三个主要的工作(数据处理、列表项选取、单元绘制)交给其它对对象来完成,JList的每个实例都维护对上述对象的引用,这样大大降低了各个功能模块的耦合度,易于扩展和维护。

  JList如何显示对象列表?

  缺省情况下,JList对象对图标和字符串对象会按照原样显示,而对于其它所有对象只显示对象toString()方法的返回值。举个例子吧,有这样一个应用程序显示java.util.Locale对象列表给用户,用户可以通过选择列表中的项目来改变应用程序所的处的语言环境。

  想象一下,JList将如何显示一个包含了Locale对象的数据模型呢?JList委派javax.swing.ListCellRenderer来显示这些对象。正如我们所料,ListCellRenderer将把对象toString()方法的返回值显示出来。然而,Locale对象返回的是ISO代码,这样的显示肯定是不符合"界面交互友好"原则的。默认情况下JList所显示的内容让大多数用户感到莫名其妙,如下图所示:

JFC/Swing活学活用系列之定制JList显示

  再来看下面这个例子,更恰如其分地说明了JList对象的缺省显示并不能对用户提供任何有意义的数据。假设一个绘图程序提供了颜色选择列表,也许你会从中选择一种颜色用于填充,也许用于绘制线条,或者干什么都可以。尽管我们将java.awt.Color对象实例放入JList中的作法是中规中矩的,但用户却不能从中得到任何的帮助,这背离了我们的初衷。如下图所示:

JFC/Swing活学活用系列之定制JList显示

  Color对象toString()方法返回的是三原色红、绿、蓝(RGB)各分量的亮度值,而不论它所表现的具体颜色是什么。除非用户知道所选取的第六行0、255、0所代表的是绿颜色,要么我们就应该在这个位置显示一些对用户更有帮助的信息。

  诚然,你也许可以把java.lang.String对象的实例放入JList中以替代Color对象的实例,但这么做却放弃了使用JList的目的:用户是要从列表中选用一种颜色并非是选取一段文本描述。

  当使用Color对象时,JList的监听变化的监听器返回的是用户实际看到的颜色。假如用String对象来替代的话,JList将把String对象返回到监听器,然后监听器再去匹配与之对应的颜色来完成填充操作,有点多此一举的感觉。进入讨论组讨论。
寻求解决方案

  作为用户,我们希望的应用程序应该是界面交互清楚明了的,而不是把Locale对象的ISO代码或者是颜色的RGB值显示出来,界面交互友好的软件才能吸引用户。ISO代码或者RGB值对编程的人来说或许有用,但并不适合于终端用户。

  幸运的是,Locale对象有个displayName属性适合用来为用户显示信息。我们可用该属性来替代toString()方法用于JList的显示,这样一来就能使得JList更具可读性。比较以下代码片段中Locale对象的toString()方法和getDisplayName方法的返回值:


上一篇:用J2ME编写手机短消息发送程序 人气:798
下一篇:理解Java面向对象的程序设计思想 人气:585
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐