图形用户接口(
GUI
)库最初的设计目的是让程序员构建一个通用的
GUI
,使其在所有的平台上都能够正常的显示。但是比较遗憾的是
AWT
产生的是在各系统看来都同样欠佳的图形用户接口,
JAVA1.2
为老的
java1.0 AWT
添加了
java
基础类(
JFC
),这是一个被称为
“Swing”
的
GUI
的一部分。
Swing
是第二代
GUI
开发工具集,
AWT
采用了与特定平台相关的实现,而绝大部分
Swing
组件却不是。
Swing
是构筑在
AWT
上层的一组
GUI
组件的集合,为了保证可移植性,它完全用
Java
语言编写,与
AWT
相比,
Swing
提供了更完整的组件,引入了许多新的特性和能力。
Swing
提供了更多的组件库,如:
JTable
,
JTree
,
Jcombox
。
Swing
也增强了
AWT
中组件的功能。正是因为
Swing
具备了如此多的优势所以我们以后在开发中都使用
Swing
。
JComponent
类是
Swing
组件的基类,而
JComponent
继承自
Container
类,因此,所有的
Swing
组件都是
AWT
的容器。
Swing
采用了
MVC
设计模式。
设计模式:
当你解决一个问题时你不需要从头做起,取而代之的是,你应该参考过去的经验,或者向专家咨询意见,设计模式是一种方法,该方法以一种结构化的形式提供专家意见。设计模式的灵感来自于建筑学设计模式。设计模式已经成为文化的一部分,当你谈论
MVC
或
“
观察者模式时
”
全世界的程序员都明白你的意思,因而,模式已经成为讨论设计问题的有效方法。
Swing
采用了
mvc
模式,
awt
事件模型采用了
“
观察者
”
模式。
MVC
-【模型-视图-控制器】模式:
该模式同其他许多设计模式一样,都遵循面向对象的设计中的一个基本原则:不让对象具有太多的功能,如对于按钮来说不要让一个按钮类完成所有的事情,替代的方法就是让一个对象负责组件的观感,而另一个对象负责存储内容,
mvc
模式实现三个独立的类:
模型-存储内容;
视图-显示内容;
控制器-处理用户输入
mvc
模式明确规定了三个对象如何进行交互。模型存储内容,它没有任何用户界面。对于一个按钮来说,内容非常简单,它只是一组标志,用来说明按钮是否按下,是否启用等。对于一个文本框来说内容稍稍复杂,它是容纳当前文本的一个字符串对象。这个内容和视图的内容并不一致--如果内容长度大于文本框的显示长度,那么用户只能看到的就是只有文本框显示的那一部分。
mvc
模式总结:模型存储完整内容,视图给出了内容的可视化表示【完整或者不完整】,控制器负责处理用户输入事件,如鼠标点击和键盘事件等,然后它决定是否把这些事件转化成对模型或视图的改变。控制器作用举例:如果用户在一个文本框中按下了一个字符键,那么控制器就会调用模型中的
“
插入字符
”
命令,然后模型告诉视图进行更新,而视图永远不会知道文本为什么改变了,但是如果用户按下了一个光标键,那么控制器会通知视图进行卷屏滚动。卷动视图对实际文本不会有任何的影响,因此模型永远不会知道该事件的发生。
Mvc
模式的一个优点是
:
一个模型可以有多个视图,其中每个视图可以显示完整内容的不同部分或不同方面。如果作为程序员来使用
Swing
,则不需要考虑
mvc
的体系结构,每个用户界面元素都有一个包装类(如
Jbutton
和
JTextField
),来保存模型和视图。
JFrame
:
JFrame
与
Frame
的功能相当,但远比
Frame
复杂。
JFrame
的结构相当复杂,在
JFrame
中安排了四个窗格,其中根窗格(
JRoot
)、布局窗格(
JLayeredPane
)和透明窗格(
Glass pane
)和我们没有什么关系;他们用来组织菜单条和内容窗格,以及实现观感的。
Swing
程序员最关心的是内容窗格(
content pane
),当设计一个框架时,组件会被添加到内容窗格中,如下代码所示:
Container cp=f.getContentPane();
Component c=…
cp.add(c);
很明显上面的代码和我们在前面学的
AWT
的编程方式不一样,不能直接用
add
方法添加组件到
JFrame
上。
JFrame
的
ContentPane
的默认布局管理器为
BorderLayout
。
JPanel
组件为中间容器,用于将较小的轻量级组件组合在一起,这意味着它与内容窗格相似。
JPanel
默认为
FlowLayout
布局。
JMenuBar
:
只能通过
JFrame
、
JWindow
或
JInternalFrame
的根窗格来添加。
JMenuBar
不能直接添加到窗体中。它由多个
Jmenu
组成,每个
JMenu
在
JMenuBar
中都表示为字符串。
JMenuBar
需要两个附件类来辅助其工作。它们是
SingleSelectionModel
类和
LookAndFeel
类。
SingleSelectionModel
类跟踪当前选定的菜单,
LookAndFeel
类负责绘制菜单栏以及在其中发生的事件作出响应。
JMenu:有两个用途,显示在JMenuBar下时,它以文本字符串的形式显示;用户单击字符串时它以弹出式菜单形式显示。可包括标准菜单项,如JMenuItem、JCheckBoxMenuItem、JRadioButtonMenuItem和Jeeparator等。JMenu需要两个附件类来辅助其工作。它们是JPopupMenu类和LookAndFeel类。JMenu类将创建JPopupMenu类,并从当前可插入的观感中获得自己的观感,用户单击JMenu,LookAndFeel类负责绘制菜单栏中的菜单以及对在其中发生的所有事情作出响应。