15.2 Swing的特性
PasswordStore展示了Swing应用程序的丰富功能。本节讨论使用Java SE平台的应用程序可用的一般特性,特别介绍Swing工具包。
15.2.1 Swing组件的可视化指导
本节以Java和Windows界面外观显示Swing组件。
1. 基本控件(表15-1)
简单组件主要用于用户输入;它们也可能显示简单状态。
表15-1 基本控件
|
名 称 |
Java界面外观 |
Windows界面外观 |
|
JButton |
|
|
|
JCheckBox |
|
|
|
JComboBox |
|
|
|
JList |
|
|
|
JMenu |
|
|
|
JRadioButton |
|
|
|
JSlider |
|
|
|
JSpinner |
|
|
|
JPasswordField |
|
|
2. 高度格式化信息的交互性显示(表15-2)
这些组件显示高度格式化的信息,用户可以修改这些信息(如果你选择的话)。
表15-2 高度格式化信息的交互性显示
|
Java界面外观 |
Windows界面外观 |
|
JColorChooser |
|
|
|
|
|
JEditorPane和JTextPane |
|
|
|
|
|
JFileChooser |
|
|
|
|
|
JTable |
|
|
|
|
|
JTextArea |
|
|
|
|
|
JTree |
|
|
|
|
3. 不可编辑的信息显示(表15-3)
这些组件专门用来向用户提供信息。
表15-3 不可编辑的信息显示
|
名 称 |
Java界面外观 |
Windows界面外观 |
|
JLabel |
|
|
|
JProgressBar |
|
|
|
JSeparator |
|
|
|
JToolTip |
|
|
4. 顶级容器(表15-4)
在任何Swing应用程序中都必须至少有一个这种组件。
表15-4 顶级容器
|
名 称 |
Java界面外观 |
Windows界面外观 |
|
JApplet |
|
|
|
JDialog |
|
|
|
JFrame |
|
|
5. 通用容器(表15-5)
这些通用容器用在大多数Swing应用程序中。
表15-5 通用容器
|
Java界面外观 |
Windows界面外观 |
|
|
JPanel |
||
|
|
|
|
|
JScrollPane |
||
(续)
|
Java界面外观 |
Windows界面外观 |
|
|
|
|
JSplitPane |
|
|
|
|
|
JTabbedPane |
|
|
|
|
|
JToolBar |
|
|
|
|
6. 专用容器(表15-6)
这些专用容器在UI中扮演特殊角色。
表15-6 专用容器
|
Java界面外观 |
Windows界面外观 |
|
|
JInternalFrame |
|
|
|
|
|
|
|
JLayeredPane |
|
|
|
|
|
|
|
JRootPane |
|
|
|
|
|
|
15.2.2 可插拔的界面外观
Swing工具包允许你决定如何配置应用程序的界面外观。如果你没有指定界面外观,Swing UI管理器则决定使用哪一种。设置界面外观的选项包括:
l 让Swing UI管理器进行选择。如果程序没有指定特定的界面外观,Swing UI管理器检查用户是否指定了首选项。如果没有指定首选项或者首选项不可用,则使用默认的界面外观。默认的界面外观由JRE的提供者决定。对于Sun公司提供的JRE,就使用Java界面外观(称为Metal)。Java界面外观适用于所有平台。
l 使用本机平台的界面外观。如果应用程序运行在Microsoft Windows XP计算机上,则使用Windows界面外观。在Mac OS平台上,使用Aqua界面外观。在UNIX平台上(比如Solaris或者Linux),根据用户的桌面选择决定使用GTK+界面外观,还是CDE/Motif界面外观。
l 指定特定的界面外观。Swing发布了4种界面外观:Java(也称为Metal)、Microsoft Windows、GTK+和CDE/Motif。GTK+界面外观要求指定一个主题,并且有很多可以在因特网上免费下载。
l 使用Synth包创建你自己的界面外观。
l 使用外部提供的界面外观。
如图15-4到图15-8所示,PasswordStore有三种界面外观可供选择。感谢Incors提供Alloy和Synthetica界面外观。
|
|
|
||
|
图15-4 Java界面外观 |
图15-5 Windows界面外观 |
||
|
|
|
|
|
|
图15-6 CDE/Motif界面外观 |
图15-7 默认的Alloy界面外观 |
图15-8 Synthetica界面外观 |
|
15.2.3 拖放和数据传输
Swing工具包支持在同一个Java应用程序内的组件之间,在不同Java应用程序之间,以及在Java和本机应用程序之间传输数据。可以通过拖动方式传输数据,或者通过剪贴板使用剪切、复制和粘贴传输数据。
1. 拖放
可以很容易地启用很多Swing组件的拖放支持(有时候只需要一行代码)。例如,启用JTable(Swing的表组件)的拖放、复制和粘贴支持非常简单。需要提供的只是表示选择的数据和如何从剪贴板获得数据——就这么简单!
2. 剪切、复制和粘贴
大多数基于文本的组件(比如编辑器板和文本字段)都支持剪切/复制和粘贴到组件外。当然,需要创建菜单项并且“连接”到适当的操作。其他组件(比如列表和树)通过很少量的处理就可以支持剪切、复制和粘贴。
PasswordStore支持各种方式的数据传输:
l 列表和树视图中的文本支持剪切、复制和粘贴。
l Details面板中的文本字段、Filter文本字段和Notes文本板支持剪切/复制、粘贴和拖放。
l Details面板中的公司图标区域接受拖放过来的图像(jpg、png、gif或者tif)。
15.2.4 国际化和本地化
国际化(internationalization)过程是设计应用程序,使用户可以使用他的文化首选项运行应用程序,而无需修改或者重新编译代码。这些文化首选项统称为地区(locale),包括(但是不限于)语言、货币格式、时间和日期格式以及数字格式。
国际化程序被设计为把文本元素(比如状态消息和GUI组件标签)存储在源代码之外的资源包中,并且动态获得。把地区特定的信息和代码分离,是允许程序用不同语言和不同首选项运行且无需重新编译的途径。
本地化(localization)过程把文本翻译为特定语言,并且添加任何地区特定的组件。把应用程序本地化为一种语言,然后在这个地区运行应用程序时,Swing从资源包获得本地化的字符串,并且布局管理器相应地改变组件的大小。
例如,使用英语的人编写了一个应用程序,遵守国际化规则;然后,应用程序被本地化为日语和西班牙语。当用户把语言系统首选项(Language System Preference)集合设置为日语并且运行应用程序时,Swing会探测到这一情况。当应用程序出现时,菜单、标签、按钮等都显示日语文本,并且相应地改变组件的大小。如果这个用户退出程序,把语言系统首选项设置为西班牙语,然后重新启动应用程序,它就显示西班牙语,并且按照新的字符集相应地改变组件大小。
Swing的布局管理器知道地区设置如何影响UI——不必为每个地区创建新的布局。例如,在从右到左书写文字的地区,布局管理器会按照相同的方向安排组件(如果指定的话)。也支持Bidi文本(混合方向的文本,例如希伯来人和阿拉伯人使用的)。
设计每个程序时都应该时刻考虑到国际化问题:GUI组件标签、状态消息、货币值、日期、电话号码和地址格式都不应该硬编码到程序中。程序经过国际化之后,语言专家可以在以后进行实际的翻译工作,无需任何重新编译处理。
如图15-9和图15-10所示,PasswordStore被本地化为日语和阿拉伯语。
|
|
|
|
图15-9 使用日语的PasswordStore |
图15-10 使用阿拉伯语的PasswordStore |
15.2.5 可访问性
辅助技术使永久或者临时残疾的用户也可以使用计算机。这包括范围很广的技术和设备——语音界面、放大镜、屏幕阅读器、Closed Caption字幕、键盘增强等。在很多国家和地区,包括美国、澳大利亚、加拿大和欧盟,都有要求程序功能平滑使用辅助技术的法律。
所有Swing组件都内置了一定程度的可访问性,但是可以遵照某些简单原则达到完全可访问性。例如,尽可能使用工具提示、键盘替换方式和图像的文本描述。
PasswordStore演示遵守可访问性原则。在图15-11中,你能看到工具提示文本的例子。
15.2.6 和桌面集成
Java SE 6引入的Desktop API使Java应用程序可以无缝地和桌面集成。支持三种类型的集成:
l 启动主机系统的默认浏览器打开指定的统一资源标识符(Uniform Resource Identifier,URI)的能力。
l 启动主机系统的默认电子邮件客户程序的能力。
l 启动应用程序打开、编辑或者输出与这些应用程序相关联的文件的能力。
在PasswordStore演示程序的Notes文本板中可以看到这种情况。点击图15-12中显示的链接,就会在默认浏览器中打开指定的URI。
关于更多信息,请参阅Using the Desktop API in Java SE 6一文。
15.2.7 系统托盘图标支持
一些平台(比如Microsoft Windows)的桌面包含系统托盘(system tray),如图15-13所示。
![]()
图15-13 Windows XP系统上的系统托盘
在Microsoft Windows系统中,它被称为“工具栏状态区域(Taskbar Status Area)”;在Gnome系统中是“通知区域(Notification Area)”;在KDE中是“系统托盘(System Tray)”。不管它叫什么,系统托盘由所有应用程序共享。
在支持系统托盘的系统上,应用程序可以把小型图标(称为托盘图标(tray icon))插入系统托盘。这个图标可以用于通知用户应用程序状态的改变,或者需要采取特别操作。点击托盘图标可以打开应用程序窗口。也可以把弹出菜单和工具提示附加到托盘图标。
Java SE 6中添加了系统托盘支持。关于更多信息,请参阅New System Tray Functionality in Java SE 6一文。
问题和练习:图形化用户界面
问题
1. Swing支持多种界面外观吗?
2. 是或否:Java界面外观是唯一一种可以跨越所有平台工作的界面外观。
3. 是或否:Swing的撤销框架(Undo Framework)支持撤销(和重做)数量不限的操作。
4. Swing的列表组件(JList)只能显示文本吗?
5. 提供开箱即用的重做支持的Swing组件是什么?
6. Java应用程序能够和本机桌面组件集成吗?
7. 可以在Web上部署Swing应用程序吗?
答案
可以在以下位置找到“问题”和“练习”的答案:
tutorial/ui/features/QandE/answers.html























































