首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

如何使用Java编程语言编写具有图形用户界面的程序?简短的回答是使用Swing工具包!本章概述核心Java平台的图形功能,重点介绍Swing。

本章没有介绍如何实现这些特性。关于“如何”使用Swing工具包,请参阅Creating a GUI with JFC/Swing

15.1  Swing包概述

本节简要介绍Java SE平台上用于开发具有图形用户界面(GUI)的程序的功能。然后,通过一个演示程序(提供了示例代码)展现这些功能。

后面的15.2节将会更加详细地讨论这些功能。

15.1.1  Swing是什么

为了创建带有图形用户界面的Java程序,就需要学习Swing。

Swing工具包包含用于构建GUI和为Java应用程序添加交互性的丰富的组件集合。Swing包含从现代工具包所能获得的所有组件:表控件、列表控件、树控件、按钮和标签。

但是,Swing远远超出了简单组件工具包的范畴。它包含丰富的撤销支持、可灵活定制的文本包、集成的国际化和可访问性支持。为了真正利用Java平台的跨平台功能,Swing支持数量众多的界面外观(look and feel),包括创建你自己的界面外观的功能。其中,Synth是一种专门为你设计的界面外观,使创建定制的界面外观的功能更加容易使用。但如果没有基本的用户界面元素(拖放、事件处理、可定制绘制和窗口管理),Swing也不能成为其一个组件工具包。

Swing是Java基础类(Java Foundation Classes,JFC)的一部分。JFC还包含对GUI程序很重要的其他特性,比如添加丰富的图形功能,以及创建可以用不同语言编写、可以由不同输入设备的用户使用的程序。

1. Swing GUI组件

Swing工具包包含丰富的组件:从基本的组件(按钮和复选框),到丰富复杂的组件(比如表和文本)。即使是看上去简单的组件(比如文本字段),也能提供复杂的功能(比如格式化的文本输入或者密码字段行为)。有适合大多数需求的文件浏览器和对话框,如果还不够,可以进行定制。如果Swing提供的组件不能完全满足你的要求,则可以利用基本的Swing组件功能创建自己的组件。

2. Java 2D API

为了使你的应用程序与众不同、表达视觉信息或者为GUI添加图表、图像或动画,你会希望使用Java 2D API。因为Swing是在2D包上构造的,所以在Swing组件内利用2D API轻而易举。添加图像、阴影和组合,这些使用Java 2D都很容易完成。

3. 可插拔的界面外观支持

任何使用Swing组件的程序员都可以选择界面外观。Sun和Apple发布的JFC类提供与平台相匹配的界面外观。Synth包允许创建自己的界面外观。GTK+界面外观使Swing程序可以使用数百种现成的界面外观。

程序可以指定运行平台的界面外观,也可以指定总使用的Java界面外观,并且无需重新编译就可以工作。或者,你可以忽略这些事务,让UI管理器进行选择。

4. 数据传输

通过剪切、复制、粘贴和拖放的数据传输对几乎所有的应用程序都是至关重要的。对数据传输的支持内置到了Swing中,并且可以在应用程序的Swing组件之间、Java应用程序之间以及Java和其他应用程序之间工作。

5. 国际化

这一特性允许开发人员构造的应用程序可以和世界各地的用户交互,使用他们自己的语言和文化习惯。应用程序可以接受具有数千个不同字符的语言的输入,比如汉语、日语和韩语。

使用Swing的布局管理器可以很容易地应用UI要求的特殊方向。例如,在从右到左书写文字的地区,UI会以从右到左的方式出现。这种支持是自动的,只需你编写一次UI代码,它就能够随着文本的本地化而改变,以从左到右或者从右到左的方式工作,而且使组件具有适当的型号。

6. 可访问性API

残疾人使用专门的辅助软件作为中介手段。这样的软件需要获得正在运行的应用程序的大量信息,以便以替代的媒介表示它们:屏幕阅读器使用合成语音读出屏幕内容,或者通过盲文显示表达内容;屏幕放大镜跟踪提示符和键盘焦点;屏上键盘显示动态的键盘,用来控制菜单选项、工具栏项目和对话框控件;语音控制系统使用户可以通过声音控制操作。可访问性API使这些辅助软件能够获得所需的信息,并且通过程序操作那些构成图形用户界面的元素。

7. 撤销框架API

Swing的撤销框架允许开发人员提供撤销和重做支持。撤销支持内置在Swing的文本组件中。对于其他组件,Swing支持撤销和重做数量不限的操作,并且很容易应用到应用程序中。例如,你可以很容易地撤销表元素的添加和删除。

8. 灵活的部署支持

如果你希望程序运行在浏览器窗口中,可以把它创建为applet,然后使用Java Plug-in运行它,Java Plug-in支持各种浏览器,比如Internet Explorer、Firefox和Safari。如果你希望创建可以从浏览器启动的程序,可以使用Java Web Start。当然,你的应用程序也可以在浏览器之外,作为独立的桌面应用程序运行。

关于部署应用程序的更多信息,请参阅第17章和第18章。

本章概述Swing的功能,首先通过一个演示程序展示很多Swing特性。当你准备好进行编程时,在线指南Creating a GUI with JFC/Swing可以帮助你利用这些特性的编程技术。

我们来分析一个展示了很多这些特性的演示程序。

15.1.2  Swing演示程序

PasswordStore演示程序演示Swing丰富特性集合的一部分。PasswordStore允许用户管理各个主机的登录信息。它还生成密码并评估密码的有效性,允许存储关于特定主机的注释或者指定表示主机的图标。

下面重点介绍PasswordStore应用程序的一些特定特性。

1. 主机信息

在启动程序时,主机列表显示在Swing的列表组件中。使用View菜单可以在表和列表之间切换视图。

在两个视图中,Host/Account Filter文本字段可以用于动态地限制包含输入字符串的主机或者账户名称的项目。

(1) 列表视图

可以将Swing的列表组件定制为包含可视数据。如图15-1所示,主机名称左侧可选的微型图标代表主机。右侧的图形使用颜色和比例填充反映密码的强度(红色=弱,黄色=中等,绿色=良好)。随着用户在下面的文本字段中进行输入或修改,条形图动态地变化。用户已经在过滤器文本字段中输入了“oo”,它和下面两项匹配:Heirloom Seeds和Pacific Zoo Shop。

过滤器文本字段

 

主机信息(列表视图)

 

详细信息面板

 

图15-1  主机信息(列表视图)和Filter文本字段

(2) 表视图

Swing表组件(图15-2)允许用户通过拖动列标题重新安排列。此外,还可以通过点击列标题对列进行排序。如果你点击的列还没有突出显示为主要排序列,那么它就会变成主要排序列,以升序排序。点击当前的主要排序列,就会切换排序顺序。例如,如果列1没有被选中,点击它就会使它成为被选中的列,并且按照升序排序其中的数据。再次点击列1,将按照降序排序。点击列2将使列2成为主要排序列,按照升序排序。

注释文本面板

 

主机信息(表视图)

 

图15-2  主机信息(表视图)

2.  Details/Notes选项卡式面板

主机信息下面的选项卡式面板允许用户选择Details面板和Notes文本面板,这使窗口的整体面积小一些,不会过多占用空间。

(1) Details面板

可以通过把图像(jpg、png、gif或者tif)拖动到左侧的图标区域,或者点击图像并打开文件浏览器,为图标区域指定图像。

用于输入或者修改主机名称、登录名和密码的文本字段支持剪切、复制、粘贴、拖放、撤销和重做。

当用户输入或者修改密码时,2D条形图动态地显示密码的分布状态。如果当前显示列表视图,那么列表中相应的颜色条也动态地改变。

(2) Notes文本面板

用户可以在这个文本组件中保存所选择的主机的注释。如果文本面板包含URI,Swing的文本组件提供的功能允许点击URI,并且启动浏览器窗口自动打开这个URI。

3. 巧妙的2D图形

PasswordStore通过若干方式使用定制的图形来增强UI:在列表视图中,使用图像代表每个主机;颜色条——强度指示器(Strength Visualizer)代表密码的有效性;以及动态的条形图——密码指示器(Password Visualizer),代表密码的分布状态。当你要添加图像时,可以通过拖放图像(在Details面板中),或者通过点击图像并打开文件浏览器,为列表视图自动生成微型图标(见图15-3)。

注意 这个演示程序只用于演示目的,而不用于密码的实际分析。

密码指示器

 

微型图标

 

大型图标

 

强度指示器

 

图15-3  2D图形

4. 多种界面外观

使用View菜单,可以在三种界面外观之间切换:Java(称为Metal)、Motif/CDE和本机界面外观:Microsoft Windows系统的Windows、Mac OS X系统的Aqua等。

5. 撤销和重做

撤销和重做按照预期处理文本,而且可以处理操作。例如,可以使用Account > Generate Password菜单生成密码,如果不喜欢新的密码,可以使用Edit > Undo或者control-Z快捷键撤销它。类似的,也可以使用Edit > Redo或者使用control-Y快捷键重做撤销的操作。

PasswordStore演示程序的复杂程度适合小型Swing应用程序,它展示了Swing功能的一部分。网上有源代码可供下载,但是对其实现的详细讨论超出了本章的范围。关于这个应用程序的架构和实现的更多信息,请参阅java.net上Scott Violet编写的Excellent Blog。

注意 如果PasswordStore是产品程序,很可能对密码数据库进行加密;但是,由于发布这类信息受美国法律限制,这里没有包含加密功能。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论