[翻译]Java 核心技术(第7版)(2)

Chapter 7. 图形编程

至此,你还只了解到如何编写从键盘接受输入,进行处理并在控制台显示结果。这并不是现在大多数用户想要的。现代的程序和网页并不是这样运行的。本章将开始介绍编写使用图形用户接口(GUI)的java程序。尤其值得一提的是,你将学会如何编写在屏幕上改变窗体大小和定位窗体,在一个窗体上用各种字体来显示文本,显示图象等等。这将为你后续章节编写有趣的程序提供一些有用的技术。

接下来两章将展示如何处理像按键和鼠标点击这样的事件,如何往你的应用程序中添加例如菜单,按钮这样的接口元素。当你完成这三章后,你将了解编写stand-alone的图形应用程序的本质。

第10章将展示如何编写使用这些特性并嵌入到web页面的applet。要了解更复杂的图形编程技巧,请参阅第2卷。

7.1 Swing简介

   当java1.0发布时,它包含了一个为基本的GUI编程提供服务的sun称之为抽象窗口工具集(AWT)的类库。基本的AWT库通过在各个目标平台(Windows,Solaris,Macintosh等等)代理用户接口元素的生成和行为到本地GUI工具集的方式来处理用户接口元素。例如,如果你在java窗口中使用了原始的AWT

放置一个TextBox,一个潜在的同等的text box将实际处理文本输入。在理论上,目标程序将可以以目标平台的外观在任何平台上运行――强调了Sub书写一次,到处运行

对于简单的应用程序这种同等方法运转的很好,但很快就发现要写一个依靠本地用户接口元素的高质量的可移植的图形库是极困难的。象菜单,滚动条,文本域这样的用户接口元素在不同的平台上会有微妙的差异。很难通过这种方法来给用户一种一致的,可预测的用户体验。更糟糕的是,有些图形环境(例如X11/Motif)不象WindowsMacintosh那样有那么丰富的用户接口组件。这反过来进一步限制可移植库通过基于对等最小公共特性方法。最后,用AWT构建的GUI应用不如本地的WindowsMacintosh应用那么好看,也没有那些平台用户预想的那样的功能。更令人沮丧的是,AWT用户接口库在不同的平台上有各种不同的bugs。开发者抱怨他们不得不在各个平台上测试应用程序,从而变成了”Write once,debug everywhere“

     1996年,Netscape创建了一个使用完全不同方法的GUI――IFC(Internet Foundation Classer)。象按钮,菜单等用户接口元素是被画到空白窗体上去的。唯一需要的同等功能是创建窗体和在窗体上画图。因此,不管程序在哪个平台上运行,NetscapeIFC窗口的外观和行为都一样。SunNetscape一起完善了这个方法,创建了一个用户接口库SwingSwingjava1.1中作为一个附加并在JDK1.2中成为标准库的一个部分。

     因此,正向Duke Ellington说的,要是没有用Swing,它更本不能算是个东西。”Swing现在是非基于对等的GUI工具集。Swingjava基础类(JFC)的一部分。JFC是一个巨大的类库并且包含了远远多余Swing的东西。JFC特性不仅仅包括Swing组件,还包括一个可访问API,一个2DAPI,一个拖放API.

注意: Swing 并不是AWT的替代物――它是建立在AWT架构上的。Swing只是提供给你更多的有用的用户接口组件。当你编写一个Swing程序时,你可以利用AWT的基础知识,甚至来处理。从今往后,当我们意为非基于对等的用户接口类时使用“Swing”,而意为像事件处理这样的窗口工具集的潜在机制我们说”AWT”

     当然,基于Swing的用户接口元素在用户的屏幕上显示出来要比使用AWT的基于对等的组件要稍微慢一点。以我们在任一台正常的机器上的经验来说,速度差异并不是个问题。另一方面,选择Swing的理由如下:

1)Swing拥有一组便利的用户接口元素

2)Swing基本不依赖于底层平台。因此它有更少的平台相关的错误

3)Swing提供了跨平台的一致的用户体验

所有这些都意味着Swing有实现Sun书写一次,到处运行口号的能力。

当然,第3条有潜在的缺点:如果用户接口元素在所有平台上看来都一样,那么他们将同本地控件看起来不同,从而使得用户不熟悉它们。

Swing以一种优雅的的方式解决了这个问题。程序员在编写Swing程序时可以赋予程序一个特定的外观模式。

         注意:JDK5.0包括一种叫做Synth的新的外观模式。通过Synth,你可以通过提供图象文件和XML描述符而不需要任何编程来定义一种新的外观。

 

         Sun还开发了一种叫做”Metal”(后来市场宣传又取名为”java外观)的平台独立的外观,然而,大部分程序员还上继续称呼它为”Metal”,我们在书中也这样。

         一些人批评Metal庸俗,这在5。0发布版中改进了。现在Metal外观支持多种主题―――颜色和字体的些许变化。默认的主题叫“Ocean”,在本书中,我们在所有的图形程序中使用SwingMetal外观以及Ocean主题。

         注意:现在大部分用户接口编程都使用Swing,只有一个值得注意的例外。Eclipse集成开发环境使用一个叫做类似于AWT的图形工具集SWT,也是在各种平台上映射到本地组件。

         最后,如果你以前使用过VBC#开发过Windows应用,你可能熟悉他们提供图形布局工具和资源编辑器的使用简单性。这些工具帮助你设计应用程序的可视化外观,然后帮你产生很多GUI代码。尽管对于java编程GUI构建器也有,但这些产品并不如Windows提供的工具成熟。然而,要完全理解图形用户接口编程(或者更进一步,我们感觉,要有效使用这些工具),你需要了解如何手工构建一个用户接口。自然地,这通常需要编写许多代码。

 

posted on 2006-08-13 14:29  Phinecos(洞庭散人)  阅读(515)  评论(0编辑  收藏  举报

导航