Swing 是新一代的图形界面工具。使用 Swing 来开发图形界面比 AWT 更加优秀,因为 Swing 是一种轻量级组件,它采用纯 Java 实现,不再依赖于本地平台的图形界面,所以可以在所有平台上保持相同的运行效果,对跨平台支持比较出色。除此之外,Swing 提供了比 AWT 更多的图形界面组件,因此可以开发出美观的图形界面程序。

Swing 类库结构

Swing 组件都采用 MVC(Model-View-Controller,即模型-视图-控制器)的设计,实现 GUI 组件的显示逻辑和数据逻辑的分离,从而允许程序员自定义 Render 来改变 GUI 组件的显示外观,以提供更多的灵活性。

Swing 围绕 JComponent 组件构建,JComponent 则由 AWT 的容器类扩展而来。Swing 组织结构如图 1 所示。


                                                     图1 Swing类库组织结构图

从图 1 可以看出,Swing 组件除了 AbstmctButton 类之外都以 J 开头。Swing 容器组件直接继承 AWT 类库中的容器组件类,其他大部分组件都是继承 JComponet 组件。组件可以划分为容器组件和非容器组件,容器组件包括 JFmme 和 JDialog。其中 JComponent 定义了非容器类的轻量级组件(JBntton、JPanel、JMenu 等)。

Swing 包

Swing 类库由许多包组成,通过这些包中的类相互协作来完成 GUI 设计。其中,javax.swing 包是 Swing 提供的最大包,它包含将近 100 个类和 25 个接口。几乎所有 Swing 组件都在该包中。表 1 列出了常用的 Swing 包。

表1 Swing常用包
包名称 描述
javax.swing 提供一组“轻量级”组件,尽量让这些组件在所有平台上的工作方式都相同
javax.swing.border 提供围绕 Swing 组件绘制特殊边框的类和接口
javax.swing.event 提供 Swing 组件触发的事件
javax.swing.filechooser 提供 JFileChooser 组件使用的类和接口
javax.swing.table 提供用于处理 javax.swing.JTable 的类和接口
javax.swing.text 提供类 HTMLEditorKit 和创建 HTML 文本编辑器的支持类
javax.swing.tree 提供处理 javax.swingJTree 的类和接口

javax.swing.event 包中定义了事件和事件监听器类,javax.swing.event 包与 AWT 的 event 包类似。Java.awt.event 和 javax.swing.event 都包含事件类和监听器接口,它们分别响应由 AWT 组件和 Swing 组件触发的事件。

例如,当在树组件中需要节点扩展(或折叠)的通知时,则要实现 Swing 的 TreeExpansionListener 接口,并把一个 TreeExpansionEvent 实例传送给 TreeExpansionListener 接口中定义的方法,而 TreeExpansionListener 和 TreeExpansionEvent 都是在 swing.event 包中定义的。

虽然 Swing 的表格组件(JTable)在 javax.swing 包中,但它的支持类却在 javax.swing.table 包中。表格模型、图形绘制类和编辑器等也都在 javax.swing.table 包中。

与 JTable 类一样,Swing 中的树 JTree(用于按层次组织数据的结构组件)也在 javax.swing 包中,而它的支持类却在 javax.swing.tree 包中。javax.swing.tree 包提供树模型、树节点、树单元编辑类和树绘制类等支持类。

Swing 容器

创建图形用户界面程序的第一步是创建一个容器类以容纳其他组件,常见的窗口就是一种容器。容器本身也是一种组件,它的作用就是用来组织、管理和显示其他组件。

Swing 中容器可以分为两类:顶层容器和中间容器。

顶层容器是进行图形编程的基础,一切图形化的东西都必须包括在顶层容器中。顶层容器是任何图形界面程序都要涉及的主窗口,是显示并承载组件的容器组件。在 Swing 中有三种可以使用的顶层容器,分别是 JFrame、JDialog 和 JApplet。

  1. JFrame:用于框架窗口的类,此窗口带有边框、标题、关闭和最小化窗口的图标。带 GUI 的应用程序至少使用一个框架窗口。
  2. JDialog:用于对话框的类。
  3. JApplet:用于使用 Swing 组件的 Java Applet 类。

中间容器是容器组件的一种,也可以承载其他组件,但中间容器不能独立显示,必须依附于其他的顶层容器。常见的中间容器有 JPanel、JScrollPane、JTabbedPane 和 JToolBar。

  • JPanel:表示一个普通面板,是最灵活、最常用的中间容器。
  • JScrollPane:与 JPanel 类似,但它可在大的组件或可扩展组件周围提供滚动条。
  • JTabbedPane:表示选项卡面板,可以包含多个组件,但一次只显示一个组件,用户可在组件之间方便地切换。
  • JToolBar:表示工具栏,按行或列排列一组组件(通常是按钮)。

在 Java 程序中容器类都是继承自 Container 类。中间容器和顶层容器在,AWT 包和 Swing 包中继承 Container 类的继承关系,如图 2 所示。


                                       图2 容器类组织结构图

【Swing】了解Swing,Swing是什么?相关推荐

  1. swing学习一(swing介绍、swing样例、布局管理器)

    图形用户界面开发(gui) 在学习swing前,我们需要了解这样几个概念:awt.swing.swt.Jface. sun公司提供了一个跨平台GUI开发工具包awt(抽象窗口工具箱Abstract W ...

  2. java swing边框_Java Swing边框

    Java Swing教程 - Java Swing边框 Swing允许我们在组件的边缘绘制边框.有不同种类的边界: Bevel Border Soft Bevel Border Etched Bord ...

  3. (swing读书笔记)Swing Look And Feel(3)

    (swing读书笔记)Swing Look And Feel(3) By cszhao1980 六.UIResource UIResource是个空接口,它的目的是为标识一种身份,即是否为UI Res ...

  4. (swing读书笔记)Swing Look And Feel(2)

    (swing读书笔记)Swing Look And Feel(2) By cszhao1980 三.      UI defaults UIDefaults内部维护了一张巨大的Hashtable, 记 ...

  5. (swing读书笔记)Swing Look And Feel(4)

    (swing读书笔记)Swing Look And Feel(4) By cszhao1980 八.MetalLookAndFeel的功能增强 Swing对它默认的跨平台L&F提供了功能的增强 ...

  6. java swing 模糊查找_Java Swing 编程 JComboBox 实现模糊查找功能。

    废话不多说,直接上代码.代码如下: import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util ...

  7. 什么是java swing_Java Swing简介:Swing是什么?

    Swing是新一代的图形界面工具.使用 Swing 来开发图形界面比 AWT 更加优秀,因为 Swing 是一种轻量级组件,它采用纯Java实现,不再依赖于本地平台的图形界面,所以可以在所有平台上保持 ...

  8. java swing 右键_java swing制作右键菜单

    java swing中如何实现右键菜单呢?    直接上代码: /*** java * 设置弹出菜单 * @param qrResultLabel */ private void setPopupMe ...

  9. java swing 树_Java Swing JTree 树形

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1.概念 官方JavaDocsApi:javax.swing.JTree JTree 树.将分层数据显示为树状轮廓的组件. 树由若干节点,通过层级关系组成 ...

  10. java swing 传值_java swing 窗体之间怎么传值?

    展开全部 传递一个对象过去32313133353236313431303231363533e58685e5aeb931333332623366:package org.somken; import j ...

最新文章

  1. FileSystem close Exception
  2. python csv数据处理_python处理csv数据的方法
  3. 中国新疆保险产业发展动态与投资机遇研究报告2022版
  4. 并发编程之进程池,线程池 和 异步回调,协程
  5. 每天一道Java题[4]
  6. php留言板上传图片,thinkphp3.2.3留言板带管理没有后台ajax上传图片功能
  7. win7下MongoDB集群告别裸奔
  8. c语言怎么添加搜索功能,C语言实现二叉搜索树的创建、插入、删除和查找
  9. 通过python和websocket构建实时通信系统[扩展saltstack监控]
  10. 符号函数的作用及Matlab中的基本用法
  11. 将多个Excel文件合并成一个有多个sheet的Excel文件
  12. 怎样配置更完美的图形工作站
  13. 什么促使计算机图形学发展,计 算 机 图 形 学 的 过 去、 现 在 和 未 来.doc
  14. C++的替代:微软如何使用rust?
  15. 新浪微博开发平台地址 http://open.weibo.com/
  16. 力荐!50 个最实用的免费机器学习数据集
  17. python温度转换_一步一步教会你,详解用Python实现一个简易的温度换算GUI小工具...
  18. CSDN社区运营午餐会第1期 – 人在驴途
  19. Beautiful english sentences,just for you.
  20. 如何将MATLAB程序插入到.net(C#)中(流程以及常见错误总结)

热门文章

  1. 设计模式——设计模式中英文对照
  2. ESP8266/ESP-01固件下载方法
  3. 华为5.0以上设备(亲测有效)激活xposed框架的流程
  4. 阿里八八“好记”测试报告
  5. Word替换重复的内容
  6. css段落首行缩进,文字间距
  7. linux裸设备读写,Linux裸设备管理学习笔记
  8. Ueditor详细配置说明文档
  9. 佛青云怎么过鸿蒙,神都夜行录鸿蒙之境策驱三运高级怎么打 鸿蒙之境策驱三运高级打法攻略...
  10. github snap android,轻量级的viewpager指示器