技术开发 频道

Java GUI三剑客风云争霸



    2. Swing——想说爱你不容易
    Java Swing是Java Foundation Classes(JFC)的一部分,它是试图解决AWT缺点的一个尝试。从这一点上来说,Swing可以说是站在前人(以AWT的表现,实在很难称之为巨人)的肩膀上了。SWING解决了AWT的很多缺点。相对于AWT, Swing是轻量级元件。SWING 提供许多比AWT更好的屏幕显示元素。它们用纯Java写成,所以同Java本身一样可以跨平台运行,这一点不像AWT。 它们是JFC的一部分。 它们支持可更换的观感和主题(各种操作系统默认的特有主题),然而Swing不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们。这意味着你可以在任意平台上使用JAVA支持的任意观感。 轻量级元件的缺点则是执行速度较慢,优点就是可以在所有平台上采用统一的行为。

    在Swing 中,Sun 开发了一个经过仔细设计的、灵活而强大的 GUI 工具包。其中大量应用了MVC模式,这大大增加了Swing的灵活性。笔者曾经做过一个大型的大型C/M/S(Client/Middleware/Server)项目,其中客户端UI采用的就是Swing,可以说,Swing几乎可以实现所有的你能够想到效果,只要你技术足够精湛,都可以实现。这也许在某些高手看来,是Swing一个很明显的优势。然而Swing的这种设计确苦了Java的初学者或者面向对象程序设计造诣不深的程序员。灵活就意味这功能强大,功能强大就意味着复杂,对于一般的程序员来说,Swing太复杂了,以至于他们在还不了解Swing的时候就已经放弃了选择Swing,或者失去净下心来继续学下去的毅力,最后写出来的只能是一堆垃圾代码。

    如果说功能强大但是过于复杂会让人对Swing想爱确不知道怎么去爱的话,那么Swing的低效则会让大多数的程序员感叹——Swing,想说爱你不容易。由于Swing是轻量级组件,因此Swing中的每一个组件都是采用Java身的画点、画线的函数画出来的,并没有调用操作系统组件。Java字节码的运行速度大概是同等条件下C/C++语言程序运行速度的1/10~1/5。于是,采用JBuilder进行开发的朋友们经常可以看到JBuilder灰屏(窗体上组件还没有画出来)的景象。正是因为Swing的蜗牛速度,因此在Java推出这么多年来,很少能够看见比较成熟的Swing桌面应用(JBuilder算是其中最成功的一个了,但是现在随着Eclipse的崛起,JBuilder的发展也是举步维艰)。

    总之,Swing在AWT的基础上很好的解决了跨平台观感不一的问题,并且提供了比AWT更为丰富的组件(AWT连树形控件、表格控件都没有)和强大的功能,却因为其过于复杂难以上手和让人无法接受的速度让广大程序员对其失去了好感。这不能不让人惋惜。
0
相关文章