首页产品库评测行情新闻|手机数码笔记本台式机DIY硬件数字家庭数码相机办公外设|软件下载游戏开发|社区

更多

数码相机
MP4
LCD
机箱
音箱

软件资讯设计 工具 系统 开发 安全 办公 陶吧 IT教育 Vista频道 | 下载中心酷我音乐盒 腾讯QQ
天极网 > 开发频道>JFC/Swing活学活用系列之定制JList显示

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

2005-12-06 09:01作者:魔戒出处:天极开发责任编辑:方舟

  下载本文源代码

  引言

  在图形用户界面方面(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所显示的内容让大多数用户感到莫名其妙,如下图所示:


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


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

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

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

关注此文的读者还看过:

返回开发频道首页

共2页。 12下一页

软件频道最新更新

热点推荐

IT嘉年华

编辑推荐

软件下载

热门
推荐

网友关注

软件
资料
游戏

装机推荐

文章排行

本周
本月
最新更新
天极服务|关于我们|About us|网站律师|RSS订阅|友情合作|加入我们|天极动态|网站地图|意见反馈|MSN/QQ上看天极
Copyright (C) 1999-2012 Yesky.com, All Rights Reserved 版权所有 天极网络