Java于1995年出现,并迅速发展成为程序开发人员所喜爱的语言。Java的重新定位于Internet和重命名为Java以前五年多时间里,它是以Oak语言的身份出现的(Oak是一种研究语言,Sun公司打算使它成为C++的一种更易于使用的和功能更强大的变体)。
虽然Java语言开发许多年并且在Sun公司内部使用,但是该语言没有用户界面工具包。当Java的优势开始显现时,很明显,它必须有用户界面工具包并应在最短的时间内开发出来。开发用户界面最快的方法是在本地组件(又叫做对等组件)上做大部分工作,并在本地组件的顶层放一层Java类。这样,在六个星期不到的时间内开发小组实现了AWT。
对等组件体系结构没有扩展性,并导致了不同平台上不一致的问题产生。此外,AWT没有可靠的面向对象基础;例如,最初的事件模型需要一个switch语句,以便根据事件类型来决定激活哪段代码。这种switch语句是对面向对象的破坏;这种根据对象类型进行切换的swich语句应该通过多态性机制来处理(注:swigch语句有时在面向对象设计中是有效的,但AWT的事件模型不是这种情况。)
Java开发人员、Sun公司或Sun公司的竞争者逐渐注重到原来的AWT的缺点。不久,出现了许多用来替代AWT的工具包。同时,Sun发布了AWT的1.1版,它做了许多改进,包括一个新事件模型和对轻量组件(非对等组件)的支持。然而,AWT1.1版还不够好用。
JavaSoft熟悉到Java领域在用户界面工具包的使用上将会出现分裂,于是他们与Netscape合作开发Swing组件集。Netscape和Sun公司的工程师用了将近一年半的时间来开发Swing,Swing在AWT上进行了巨大的改进。
虽然有些Swing组件替代了AWT的重量组件,但Swing不是AWT的替代品,而是AWT的扩展,Swing使用了大量的AWT下层构件,包括对图形、字体和布局治理器的支持。要更深入了解Swing,就必须对AWT的下层构件有基本的了解。
与所有其他软件一样,Swing还不完美。到现在为止,Swing中仍有一些程序错误。在某些地方还表现出了一些设计缺陷,但它是一个可靠的用户界面工具包,比原来的AWT有了很大改进。