c10(Swing)

    技术2022-05-11  80

    JFC究竟是什么,什么是Swing?Swing V.S. AWT?JFC(Java Foundation Classes)oreilly书中的对JFC的定义:JFC是一组客户端图形、GUI(图形用户界面)和相关的编程任务的标准java api的松散集合。(有点MFC的感觉...)Swing的提出是在AWT的基础上的所谓Swing是轻组件,AWT是重组件,我理解也许这个轻是翻译者按照字面的意思翻译过来,而后来大家都默认了这个这个翻译,我想也许设计 者在起名字的时候将这两个东西分为了上下层,下层的当然是AWT,它与最底层打交道,Swing是上层组件,也就是在AWT的基础之上实现的组件,(个人猜想)这些组件更加简单,开发简单,并且绝大多数Swing组件上实现了平台独立性,至少在不同的平台上显示的东西看起来是一样的,而AWT采用了与特定平台相关的实现,Swing围绕着JComponent的新组件构建,而JComponent则由AWT的容器类扩展而来,他定义了两种类型的组件:顶层容器(JFrame,JApplet,JDialog,JWindow)和轻质组件(JButton,JPanel,JMenu等),顶层容器定义了可以包含轻质组件的框架,一个顶层Swing容器提供了一个区域,轻质组件可在这个区域中绘制自身。顶层容器是它们对应的重质AWT组件的Swing子类,这些Swing容器依靠它们的AWT超类的本地方法与硬件进行适当的交互。关于两者之间的比较,从结构上说swing很多组件采用了数据和显示分开的结构,比如Jtable就有JtableModel类,从资源类型上说,一个是轻型窗口工具包,一个是重型的,前段时间看了一个两者比较的文章,放到这里和大家一起分享一下

    既生 AWT,何生 Swing?在 Java 技术刚出现的初期,大家最感兴趣的 Java API 无疑地就是 AWT。一方面因为 JDK 1.0 时只有 AWT 称得上是一组完整的 application framework,其它 Java API 都比较偏向个别的 class,二方面是因为当时大家受尽了 MFC 的苦,希望能有一个比较好的替代品。

    MFC 的兴盛期已过,目前余孽尚存,我很乐见这种不良的 API 逐渐雕零。Bruce Eckel 说得好:「MFC 是我经验过最糟糕的东西(MFC is the worst thing that I've experienced)」。少说重话的 Bruce Eckel 批评 MFC 其来有自,因为 Bruce Eckel 是对象导向程序设计的倡导者,而 MFC 正是对象导向设计失败的绝佳范例。相较于 MFC 的不良设计,AWT 在对象导向方面就好很多了,但是因为两者都采用 ripple 形式的 event model,所以两者在这方面很类似。在 JDK 1.1 版以后,整个 Java(包括 AWT)的 event model 改用较好的 delegation event model。

    JDK 1.2 之后,Java 有了另一组 GUI 的 API,叫做 Swing。因为 Swing 是 lightweight 的 API,所以无所不能,不但有各式各样先进的组件,而且连组件风格都可抽换。Swing 出现之后,大家很快地就不太使用 AWT 了。我发现 lightweight 组件近年来大行其道,跨 Windows/unix/Linux 平台的 Qt 也是 lightweight 组件的套件。

    不要以为 Swing 是用来取代 AWT 的,其实 Swing 是架构在 AWT 之上做出来的(Swing 有四个 heavyweight 组件),没有 AWT,也就不会有 Swing。Swing 的出现只是减少程序员直接使用 AWT 的机会,而不会让 AWT 消失。

    不管你选用 AWT 或 Swing 来开发你的 GUI,最好不要同时使用两者,因为:

    AWT 或 Swing 的视觉风格差异很大,混用两者感觉不协调。Swing 的组件大部分都是 lightweight,而 AWT 的组件一律是 heavyweight,两者混在一起可能会造成 Z-Order 的错乱。(请看「探究 Z-Order」一文)混用 AWT 和 Swing 很可能会造成 Swing 的最佳化无用武之地,结果速度比只用 AWT 或只用 Swing 都来得慢。虽然 Swing 的组件有诸多优点,但是它有一项致命的缺点 ...「慢」。许多人开发出来的 Swing 程序执行速度很慢,但是问题不见得全都出在 Swing 上面,有可能在于程序员的程序经验不足,思虑欠周所致。遇到像这样的情况,我会建议他们把程序的某些地方改写,通常效能会有明显地改进。如果这样还是不够快,那么最后一招就是把 GUI 由 Swing 改成 AWT。

    最近 AWT 又变得稍微重要起来了。IA(信息家电)产品热潮逐渐兴起,许多 IA 产品上会有 JRE,能够执行 Java 程序,例如 WinCE、PalmOS、Symbian EPOC 这三大 PDA 的 OS 都有 JRE。比起桌上型计算机,掌上型的 IA 不但内存有限、CPU 不够快、屏幕小且色彩少。这类 IA 上面的 Java 程序一定要用 AWT 来设计 GUI,因为这类装置的 JRE 根本不支持 Swing 这样耗费资源的庞然大物。

    总而言之,如果你:

    需要快速的 GUI,或者需要在 IA 上开发 Java 程序那么,你应该多花一点时间把 AWT 学好。否则,你应该直接去学 Swing,会比较实际些。(摘自:http://www.wwwkf.com/archivers/tid-1d0222-17-537761-more/)

    认识Java基础类的关键特性Java基础类是关于GUI组件和服务的完整集合,它大大简化了健壮Java应用程序的开发和实现,主要包含5个API:AWT,Java2D,Accessibility,Drag&Drop,Swing,它提供了帮助开发人员设计复杂应用程序的一整套应用程序开发包。它的重点在于Swing,Swing是用来进行基于窗口的应用程序开发,它提供了一套丰富的组件和工作框架,以指定GUI如何独立于平台地展现其视觉效果。 


    最新回复(0)