当前位置:文档之家› JAVA语言程序设计教程 第9章

JAVA语言程序设计教程 第9章

与AWT类似,SWT也是基于原生组件实现的。如果某平 台有对应的原生组件,SWT则调用该原生组件;如果此平台 没有对应的原生组件,SWT则创建模拟组件。AWT是可跨平 台移植的,但是不同平台的SWT实现是不同的。可以说SWT 综合了AWT和Swing的优点。
在跨平台能力方面,SWT不如Swing优秀。但SWT具有可 以作为本地应用程序实现的优点,性能较高一些,并允许利用 基于SWT的GUI来实现本地兼容性。如果只为一种平台开发系 统,可以优先选用SWT。现在有一些成功的SWT案例,例如 开源集成开发环境Eclipse就是用Java和SWT开发的。
【例9-1】 创建窗体并设置窗体标题以及其他属性,然后 显示窗体。
import Javax.swing.*; public class HelloSwing {
public static void main(String[] args) { JFrame win = new JFrame(“HelloSwing的标题”); win.setSize(250,100); //设置窗口大小 win.setLocation(250,250);//设置窗口位置
综合来讲,Swing 具有内嵌于Java技术的优点,是完全 可移植的,无可争议,它是一种很好的架构。本章后面的章 节将对Swiget Toolkit(SWT),最初是由IBM开发的一 套用于Java的图形用户界面系统,现在由Eclipes基金会负责维 护,与Swing是竞争关系。
第 9 章 图形用户界面设计
9.1 AWT、Swing和SWT 9.2 一个简单例子 9.3 顶层容器 9.4 JFrame窗体 9.5 菜单 9.6 布局管理 9.7 常用组件 9.8 常用对话框 9.9 在Swing组件中使用HTML 9.10 事件处理 9.11 界面外观 9.12 并发编程与线程安全
9.1 AWT、Swing和SWT
9.1.1 AWT
Abstract Windows Toolkit(AWT)是最原始的Java GUI工具 包。AWT 是一个非常简单且功能相对有限,包括GUI组件、 布局管理器和事件的工具包。
AWT可以看做是对原生组件的一个包装,例如在Windows 操作系统下,当生成一个按钮时,Java会通过AWT调用 Windows API来创建原生按钮组件。这样的好处是控件的外观 跟平台上其他软件保持一致,但这也带来问题。因为不同的平 台下,GUI组件不是完全相同的,有些组件只在某些平台上有, 有些组件虽然在各种平台上都有,但是组件的行为却不完全一 致。
//在窗体上添加一个标签 JLabel label = new JLabel(“Hello Swing!”); win.add(label); //关闭窗口时,释放该窗体
win.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); //使窗体可见 win.setVisible(true);
为了使得Java能够“一次编写,到处运行”,AWT只得采 用最大公约数原则,即AWT只拥有所有平台上都存在的组件 的公有集合。最终的结果很不幸,有些经常使用的组件,例如 表、树、进度条等都不支持。对于需要它们的应用程序来说, 都要从头开始创建这些组件,这是一个很大的负担。
此外由于AWT要依赖平台GUI原生组件来实现GUI,导致 GUI的外观和行为(这一点更重要)在不同的平台上会有所不同。 这会导致“编写一次,到处测试(write once, test everywhere, 即 WOTE)”的情况发生,远远不能满足Java开发的要求。
鉴于上述缺点,一般不推荐使用AWT。虽然如此,但 Swing中的一些组件,如字体组件Font、绘图组件Graphics等是 由Java 2D提供的,它们是AWT的一部分。还有Swing中的消息 处理机制,也是采用AWT中的机制,并没有再独创一套。
9.1.2 Swing
Swing是试图解决AWT缺点的一种尝试。在Swing中,开 发了一个经过仔细设计的、灵活而强大的轻量级GUI工具包。 Swing是在AWT组件基础上构建的,例如Swing中的类JFrame 的父类是AWT中的类Frame,因此Swing也可被视作AWT的一 部分,或者为AWT的升级版。Swing 使用了AWT的事件模型 和一些支持类,例如 Colors、Images 和 Graphics。
9.2 一个简单例子
例9-1创建一个窗体,并设置窗体标题以及其他属性,然 后显示窗体。所有的代码都在HelloSwing.Java文件中。
通过例9-1可以看出,创建一个Java GUI程序非常简单。 在main方法中依次创建JFrame对象,设置其属性并显示。程序 代码的每一行功能请参考代码的注释。需要注意的是,这个例 子不是线程安全的,请参考相关编写线程安全的代码。
} } 程序运行结果如图9.1所示。
图9.1 例9-1的运行结果
9.3 顶 层 容 器
Swing中提供的图形界面相关的类大致可以分两类:容 器和组件。容器如JFrame,被用来放置各种组件。组件可以放 到中间容器中,也可以放到顶层容器中。中间容器有JPanel等, 顶层容器有JFrame、JDialog和JApplet。
Swing的特殊之处在于它是用纯Java写成的,因此里面的 组件称之为轻量级组件。Swing因为是用Java写成,所以它的 一大优点就是可以跨平台运行,可以在所有平台上采用统一的 行为。但轻量级组件的缺点是执行速度较慢。
轻量级组件在不同的平台上有相同的外观,这会使得 Windows下的Java程序界面不像Windows程序,Linux下的 Java程序界面不像Linux程序,它们只像Java程序,这会使得 程序的界面风格跟平台不一致。为解决这一问题,Swing现 在实时更换程序的外观主题(各种操作系统默认的特有主题), 然而它不是真的使用平台提供的原生主题,而是仅仅在表面 上模仿它们。
相关主题