JavaGUI-Swing(三)——介绍

Swing 编程

Swing概述

Swing是由100%纯java实现的,不在依赖于本地的GUI,因此可以在所有平台上都保持相同的界面外观。独立于本地平台的Swing组件被称为轻量级组件,而依赖于本地平台的AWT组件被称为重量级组件

由于Swing的所有组件完全采用Java实现,不再调用本地平台的GUI,所以导致Swing图形界面的显示速度要比AWT图形界面的显示速度慢一些,但相对于快速发展的硬件设施而言,这种微小的速度差别无妨大碍。

使用Swing的优势:

  1. Swing组件不在依赖于本地平台的GUI,无需采用各种平台的GUI交集,因此Swing提供了大量的图形界面组件,远远超出了AWT所提供的图形界面组件集。

  2. Swing组件不再依赖于本地平台GUI,因此不会产生与平台相关的bug。

  3. Swing组件在各种平台上运行时可以保证具有相同的图形界面外观。

Swing提供的这些优势,让Java图形界面程序真正实现了“Write Once,Run Anywhere”的目标。

Swing的特征

  1. Swing组件采用MVC(Model-View-Controller),即模型——视图——控制器设计模式:

    • 模型(Model):用于维护组件的各种状态

    • 视图(View):是组件的可视化表现;

    • 控制器(Controller):用于控制对于各种事件、组件做出响应

    • 当模型发生改变时,它会通知所有依赖它的视图,视图会根据模型数据来更新自己。Swing使用UI代理包装视图和控制器,还有一个模型对象来维护该组件的状态.例如,按钮JButton有一个维护其状态信息的模型ButtonModell对象。Swing组件的模型是自动设置,因此一般都使用JButton,而无须关心ButtonModel对象。

  2. Swing在不同的平台上表现一致,并且有能力提供本地平台不支持的显示外观。由于Swing采用MVC模式来维护各组件,所以当组件的外观被改变,对组件的状态信息(由模式维护)没有任何影响。因此,Swing可以使用插拔式外观感觉(Pluggable Look And Feel,PLAF)来控制组件外观,使得Swing图形界面在同一个平台上运行时能拥有不同的外观,用户可以选择自己喜欢的外观。相比之下,在AWT图形界面中,由于控制组件外观的对等类与具体平台相关,因此AWT组件总是具有与本地平台相同的外观。

大部分Swing组件都是JComponent抽象类的直接或间接子类(并不是全部的Swing组件),JComponent类定义了所有子类组件的通用方法,JComponent类时AWT里java.awt.Container类的子类,这也是AWT和Swing的组件都可作为容器使用(JFrame继承了Frame类)。

Swing组件和AWT组件的对应关系:

大部分情况下,只需要在AWT组件的名称前面加个J,就可以得到其对应的Swing组件名称,但又几个例外:

  1. JComboBox:对应于AWT里的Choice组件,但比Choice组件功能更丰富。

  2. JFileChoose:对应于AWT里的FileDialog组件。

  3. JScrollBar:对应于AWT里的Scrollbar组件,注意两个组件类名中b字母的大小写差别。

  4. CheckBox:对应于AWT里的Checkbox组件,注意两个组件类名中b字母的大小写差别。

  5. JCheckBoxMenuItem:对应于AWT里的CheckboxMenuItem组件,注意两个组件类名中b字母的大小写区别。

Swing组件按照功能来分类:

  1. 顶层容器:JFrame、JApplet、JDialog和JWindow。

  2. 中间容器:JPanel、JScrollPane、JToolBar等。

  3. 特殊容器:在用户界面上具有特殊作用的中间容器,如JIntermalFrame、JRootPane、JLayeredPane和JDestopPane等。

  4. 基本组件:实现人机交互的组件,如JButton、JComboBox、JList、JMenu、JSlider等。

  5. 不可编辑信息的显示组件:向用户显示不可编辑信息的组件,如Label、JProgressBar和JToolTip等。

AWT组件的Swing实现

Swing为除Canvas之外的所有AWT组件提供了相应的实现,Swing组件比AWT组件的功能更加强大,相对于AWT组件,Swing组件具有如下4ge额外功能:

  1. 可以为Swing组件设置提示信息。使用setToolTipText()方法,为组件设置对用户有帮助的提示信息。

  2. 很多Swing组件如按钮、标签、菜单项等,除使用文字外,还可以使用图标修饰自己。为了允许在Swing组件中使用图标,Swing为icon接口提供了一个实现类:imageIcon,该实现类代表一个图像图标。

  3. 支持插拔的外观风格。每个JComponent对象都有一个响应的ComponentUI对象,为它完成所有的绘画、事件处理、决定尺寸大小等工作。ComponentUI对象依赖当前使用的PLAF,使用UIManager.setLookAndFeel()方法可以改变图形界面的外观风格。

  4. 支持设置边框。Swing组件可以设置一个或多个边框。Swing中提供了各式各样的边框供用户使用,也能建立组合边框或自己设计边框。一种空白边框可以用于增大组件,同时协助布局管理器对容器中的组件进行合理的布局。

每个Swing组件都有一个对应的UI类,例如JButton组件就有一个对应的ButtonUI类来作为UI代理。每个Swing组件的UI代理的类名总是将该Swing组件类名的J去掉,然后在后面添加UI后缀。UI代理类通常是一个抽象基类。不同的PLAF会有不同的UI代理实现类。Swing类库中包含了几套UI代理,分别放在不同的包下,每套UI代理都几乎包含了所有Swing组件的ComponentUI实现,每套这样的实现都被称为一种PLAF实现》以JButton为例,其UI代理的继承层次如下图所示:
image

posted @ 2022-09-09 21:59  maplerain  阅读(62)  评论(0编辑  收藏  举报