第一章 第三节 Swing

第三节  Swing

返回目录

 

1997JavaOne大会上提出,并在19985月发布的JFC(Java Foundation Classes)包含了一个新的Java窗口开发包,被命名为Swing。这些新的GUI组件是对AWTappreciable升级,看起来对Java占领计算机世界很有帮助。Java的时代到来了:可下载的applet将是未来的软件;人们将从其他操作系统转向JavaOS,从传统的计算机转向称为JavaStation的精简型用户端电脑(thin-client network computer)Microsoft将最终在桌面程序领域失去竞争力而被驱逐。虽然这些展望没有实现,但Swing作为Java applet和程序的GUI库却是十分繁盛。

Swing架构

Swing”仅仅是个新组件的名称,但它一直沿用到今天,可能是因为这个名称非常贴切的缘故。Swing尝试着用下面几种方式改变公众的看法:

  • AWT依赖对等架构,用Java代码包装本地窗口控件;Swing却根本不使用本地代码和本地控件。
  • AWT把屏幕绘制交给本地控件;Swing组件自己绘制屏幕。
  • 因为Swing不依赖本地窗口控件,它可以抛弃AWT的“最大公约数”的方法,并在每个平台下实现窗口控件,从而创建一个比AWT更强大的开发包。
  • Swing缺省模式下采用本地平台的look and feel。然而,它并不仅仅局限于此,还可以采用插件式的look and feel。因此Swing应用程序可以看起来像Windows程序,Motif程序,Mac程序,还有它自己的look and feel--“轻金属(dubbed Metal)”。这样,Swing应用程序可以完全忽略它运行时的系统环境,并且自成风格。这是对单调一致的桌面程序外观的一大挑战,想象一下Swing有多骄傲!

Swing组件超出了简单窗口控件的范畴,而且采用了优秀的实现best practices)和新兴的设计模式。有了Swing,您不再是取得GUI控件的句柄,然后给它填充数据;现在您定义一个模型(model)来保存数据,定义一个视图(view)来显示数据,定义一个控制器(controller)来响应用户的输入。事实上,大部分Swing组件的构建是基于MVC(model-view-controller)模式的。MVC使应用程序开发变得更清晰,维护变得更易管理。

Swing的缺点

尽管SwingAWT的基础上做了很大的改进,它还是没能使Java成为构建桌面应用程序的首选工具。也许Swing的拥护者会立即举出Swing的成功案例,像开源文本编辑器jEdit(http://www.jedit.org/)BorlandUML(Unified  Modeling  Language)建模工具Together(http://www.borland.com/),但是Swing程序在桌面应用方面依然很少。Sun推出了一个记录Swing应用程序的列表“Swing  Sightings
(http://java.sun.com/products/jfc/tsc/sightings/),以此说明这些程序的出现是值得关注的。然而我们也可以看到“C++ Sightings”和“Visual Basic Sightings”的网页。

为何Swing没有达到它的预期?原因大致归结为下面两点

  • 速度的缺乏
  • look and feel

Swing的狂热者可能会对Swing速度慢这一点感到忿忿不平。不可否认,JIT(just-in-time)编译器,Java虚拟机以及Java语言本身就使得Swing应用程序和本地程序拉开了一段距离。就算这样,Swing仍显得比本地应用程序行动缓慢和响应不积极。电脑变得越来越快,用户对速度的期望值也随之增加,任何可感知的迟缓都无法令人容忍。

Swinglook and feel的抱怨也引起了Swing的开发者的愤怒。最终,他们宣布,Swing拥有各种可插入式/插件式的外观,并且可以显示成任何样子。J2SE1.4.2甚至添加了对Windows XPGTK+的支持,这样,在这些平台上运行的Swing程序会自动采用该平台的外观。

但是,问题仍然存在:Swing将一直处于落后最新的图形用户界面一步状态,因为必需在Java库里明确地添加对最新GUI的支持。当使用 J2SE 1.4.2或更早的版本时在Windows  XP上运行的Swing应用程序将显现为Windows98的外观。

而且,当使用XP  themesWindowBlinds(http://www.stardock.net/)等软件来改变皮肤或图形外观时用户日益铭记他们自己的特征和个性。而Swing不仅不理会操作系统,而且连用户进行参数选择的机会都不给。

简而言之,Swing应用程序仍不像本地应用程序一样执行,外观也不一样。Java要想摆脱常年以来处于不断学习中的地位并成为桌面应用程序开发中的主角,它的GUI仍需要改进。

MVC

MVC架构将数据(模型),数据的表示(视图),和数据的操作(控制器)进行了隔离。用一个记录你喜欢的颜色的程序举个例子,这个程序必须:

  • 识别你选择的颜色并把它记录在内存中
  • 显示当前选中的颜色
  • 允许你改变当前颜色
  • (在改变前)保持这种颜色

模型(model)用来表示被选中的颜色。它可以被存储为JavaColor对象,可以是二进制的RGB值,也可以是一个记录HTML表示的字符串。

视图(view)是显示当前颜色的方式,它可以将RGB值显示为数字,可以把HTML值显示为一个字符串,可以显示为颜色的名称,亦或是一个小色块(color swatch)。

控制器(controller)包括改变颜色的方法和保持颜色的机制。你可以在色轮(color wheel)上点击你想要的颜色,可以输入颜色的名称,输入颜色的HTML值,移动表示RGB值的滑动条。为了保持颜色,程序可能把它保存在数据库中,可能写到XML文件中,也可能调用用JavaAPI来保存。

显示或选择颜色的方式应该和颜色没什么关系。被选中的颜色不应改变颜色的存储机制。坚持这种设计可以使你在不改变其他组件的情况下只改变一个组件。例如,色盲用户抱怨说他们无法用色轮(color wheel)的方式选择颜色,你可以只改变视图(view)让它显示颜色名称,而让模型(model)和控制器(controller)保持原样。

事实证明,MVC设计模式是一种强大的,如今不可或缺的创建应用程序的方式。

 

返回目录

posted @ 2011-09-07 22:49  ols  阅读(357)  评论(0编辑  收藏  举报