AWT只提供基本的组件,使很多设计变得复杂,且无法在不同的平台下保持显示风格的一致性.例如:如果建立一个按钮Button对象,就会有一个按钮(ButtonPeer)同其对象一起被建立,然后此按钮对象会请求底层操作系统创建一个真正的按钮.即在Windows NT 上执行,那么创建的就是Windows NT按钮,Linux 上执行,那么创建的就是Linux按钮.因此AWT组件外观会受到底层操作系统的影响.
(2).Swing采用了一种MVC的设计范式,即"模型-视图-控制"(Model-View-Controller),其中模型用来保存内容,视图用来显示内容,控制器用来控制用户输入。
(3).Swing外观感觉采用可插入的外观感觉(Pluggable Look and Feel,PL&F)
在javax.swing包中,定义了两种类型的组件:顶层容器(JFrame,JApplet,JDialog和JWindow)和轻量级组件。Swing组件都是AWT的Container类的直接子类和间接子类。
java.awt.Component
-java.awt.Container
-java.awt.Window
-java.awt.Frame-javax.swing.JFrame
-javax.Dialog-javax.swing.JDialog
-javax.swing.JWindow
-java.awt.Applet-javax.swing.JApplet
-javax.swing.Box
-javax.swing.Jcomponet
Swing包是JFC(Java Foundation Classes)的一部分,由许多包组成
包 | 描述 |
Com.sum.swing.plaf.motif | 用户界面代表类,它们实现Motif界面样式 |
Com.sum.java.swing.plaf.windows | 用户界面代表类,它们实现Windows界面样式 |
Javax.swing | Swing组件和使用工具 |
Javax.swing.border | Swing轻量组件的边框 |
Javax.swing.colorchooser | JcolorChooser的支持类/接口 |
Javax.swing.event | 事件和侦听器类 |
Javax.swing.filechooser | JFileChooser的支持类/接口 |
Javax.swing.pending | 未完全实现的Swing组件 |
Javax.swing.plaf | 抽象类,定义UI代表的行为 |
Javax.swing.plaf.basic | 实现所有标准界面样式公共功能的基类 |
Javax.swing.plaf.metal | 用户界面代表类,它们实现Metal界面样式 |
Javax.swing.table | Jtable组件 |
Javax.swing.text | 支持文档的显示和编辑 |
Javax.swing.text.html | 支持显示和编辑HTML文档 |
Javax.swing.text.html.parser | Html文档的分析器 |
Javax.swing.text.rtf | 支持显示和编辑RTF文件 |
Javax.swing.tree | Jtree组件的支持类 |
Javax.swing.undo | 支持取消操作 |
4.MVC(Model-View-Control)体系结构
Model:存储组件数据的地方.如JCheckBox中的Model将存储所有选项的值,并以boolean的值来表示,而JTable的Model则会存储所有表格上的数据.
View: 显示组件的外观.
Controller:处理用户在组件上的操作,并将改变后的数据存储在Model中。
为了简化组件的设计工作,在Swing组件中View和Controller两部分合为一体。每个组件有一个相关的分离模型和它使用的界面(包括视图和控件)。比如,按钮JButton有一个存储其状态的分离模型ButtonModel对象。组件的模型是自动设置的,例如一般都使用JButton 而不是使用ButtonModel 对象。另外,通过Model类的子类或通过实现适当的接口,可以为组件建立自己的模型。把数据模型与组件联系起来用setModel( )方法。
Swing组件中的Model可以分成三类:
(1).存储组件内将被用来操作的数据.
(2).存储控制组件操作模式的数据
(3).存储组件本身性质的数据模式
MVC是现有的编程语言中制作图形用户界面的一种通用的思想,其思路是把数据的内容本身和显示方式分离开,这样就使得数据的显示更加灵活多样。比如,某年级各个班级的学生人数是数据,则显示方式是多种多样的,可以采用柱状图显示,也可以采用饼图显示,也可以采用直接的数据输出。因此在设计的时候,就考虑把数据和显示方式分开,对于实现多种多样的显示是非常有帮助的。