参考文献:《Java疯狂讲义》(第三版)
Swing开发图形界面比AWT更优秀
因为Swing是一种轻量级组件,它采用100%的Java实现,不再依赖于本地平台的图形界面,所以可以在所有的平台上保持相同的运行效果,对跨平台的支持比较出色
此外,Swing提供比AWT更多的图形界面组件,因此可以开发出更美观的图形界面。
AWT需要调用底层平台的GUI实现,所以AWT只能使用各种平台上GUI组件的交集,这大大限制了AWT所支持的组件。
Swing几乎所有组件都采用了Java实现,所以无需考虑底层平台是否支持该组件,因此Swing可以提供许多特殊容器和组件。
Swing组件都采用了MVC模式。
Swing的所有组件采用了Java实现,不再调用本地平台的GUI,导致Swing图形界面的显示速度要比AWT图形界面显示速度稍微慢一点。
Swing的优势:
1、Swing组件不再依赖于本地平台的GUI,无须采用各种平台的GUI交集,因此Swing提供了大量图形界面组件,远远超过了AWT所提供的图形界面组建集
2、Swing组件不再依赖于本地平台GUI,因此不会产生与平台相关的bug
3、Swing组件在各种平台上运行可以保证具有相同的图形界面外观
特点:
1、采用MVC模式
2、在各种平台上保证一致
知识点:
为菜单项指定快捷键时应该使用大写字母来代表按键,例如 KeyStroke.getKeyStroke('N',InputEvent.CTRL_MASK)代表“Ctrl+N”,但KeyStroke.getKeyStroke('n',InputEvent.CTRL_MASL)不代表“Ctrl +N”
知识点:
JFrame提供了一个getContentPane()方法,这个方法用于返回该JFrame的顶级容器(即JRootPane对象),这个顶级容器会包含JFrame所显示的所有非菜单组件。
即所有看似放在JFrame中的Swing组件,除了菜单外,其实都是放在JFrame对应的顶级组件中的,而JFrame容器提供了个体ContentPane()方法返回的顶级容器。
在Java5之前,Java甚至不允许向JFrame中添加组件,必须先调用JFrame的getContentPane()方法获得该窗口的顶级容器,然后将所有组件添加到该顶级容器中。
Java5以后,Java改写了JFrame的add()和setLayout()等方法,当程序调用JFrame的add()和setLayout()等方法时,实际上是对JFrame的顶级容器进行操作。
知识点:
为什么单击Swing多行文本域时不是弹出像AWT多行文本域中的右键菜单?
这是由Swing组件和AWT组件实现机制不同决定的。
前面已经之处,AWT的多行文本域实际上依赖于本地平台的多行文本域。简单地说当我们在程序中放置一个AWT多行文本城,且该程序在Windows平台上运行时,该文本域组件将和记事本工具编辑区具有相同的行为方式,因为该文本域组件和记事本工具编辑区的底层实现是一样的。
但Swing的多行文本域组件则是純Java的,它无须任何本地平台的GUI支持,他在任何平台上具有相同的行为模式,所以Swing多行文本域组件默认是没有右键菜单的,必须由程序员显示的为它分配右键菜单。
而且Swing提供的JTextArea组件默认没有滚动条(AWT的TextArea是否有滚动条则取决于底层平台的实现),为了让该多行文本域具有滚动条,可以将该多行文本域放到JscrollPane容器中。