Java图形用户界面设计Java语言程序设计(第2版)电子教案

上传人:san****019 文档编号:22821708 上传时间:2021-06-01 格式:PPT 页数:141 大小:1.21MB
收藏 版权申诉 举报 下载
Java图形用户界面设计Java语言程序设计(第2版)电子教案_第1页
第1页 / 共141页
Java图形用户界面设计Java语言程序设计(第2版)电子教案_第2页
第2页 / 共141页
Java图形用户界面设计Java语言程序设计(第2版)电子教案_第3页
第3页 / 共141页
资源描述:

《Java图形用户界面设计Java语言程序设计(第2版)电子教案》由会员分享,可在线阅读,更多相关《Java图形用户界面设计Java语言程序设计(第2版)电子教案(141页珍藏版)》请在装配图网上搜索。

1、 9.1图 形 用 户 界 面 设 计 概 述v 9.1.1 GUI支 持 包 和 简 单 GUI程 序 例v 1.java.awt包 v Java语 言 在 java.awt包 中 提 供 了 大 量 地 进 行GUI设 计 所 使 用 的 类 和 接 口 , 包 括 绘 制 图 形 、设 置 字 体 和 颜 色 、 控 制 组 件 、 处 理 事 件 等 内 容 ,AWT是 Java语 言 进 行 GUI程 序 设 计 的 基 础 。v 2. javax.swing包v Swing包 是 Java基 础 类 库 ( Java Foundation Classes, JFC) 的 一 部 分

2、 。 Swing提 供 了 从 按钮 到 可 分 拆 面 板 和 表 格 的 所 有 组 件 。 v Swing组 件 是 Java语 言 提 供 的 第 二 代 GUI设 计 工 具 包 , 它以 AWT为 基 础 , 在 AWT内 容 的 基 础 上 新 增 或 改 进 了 一 些GUI组 件 , 使 得 GUI程 序 功 能 更 强 大 , 设 计 更 容 易 、 更 方便 。 Swing是 开 发 新 组 件 的 项 目 代 码 名 , 现 在 , 这 个名 字 常 用 来 引 用 新 组 件 和 相 关 的 API。v AWT组 件 和 对 应 的 Swing组 件 , 从 名 称

3、上 很 容 易 记 忆 和 区别 。 例 如 , AWT的 框 架 类 、 面 板 类 、 按 钮 类 和 菜 单 类 ,被 命 名 为 Frame、 Panel、 Button和 Menu, 而 Swing对 应的 组 件 类 被 命 名 为 JFrame、 JPanel、 JButton和 JMenu。与 AWT组 件 相 比 , Swing组 件 的 名 前 多 一 个 “ J” 字 母 。另 外 , AWT 组 件 在 java.awt包 中 ,而 Swing组 件 在javax.swing包 中 。 v 3.一 个 Java GUI简 单 程 序v 【 例 9.1】 一 个 简 单

4、的 Swing GUI应 用 程 序 。 在 一 个 框架 窗 口 中 显 示 两 个 标 签 和 一 个 按 钮 : 上 面 的 标 签 显 示一 串 固 定 的 文 字 信 息 , 选 择 按 钮 后 在 下 面 的 标 签 上 显示 系 统 现 在 的 时 间 。import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;/ 继 承 JFrame类 并 实 现 ActionListener接 口public class SwingDemo extends JFrame implemen

5、ts ActionListener JButton b1; / 声 明 按 钮 对 象 JLabel l1,l2; / 声 明 标 签 对 象 SwingDemo() / 定 义 构 造 方 法 super(Swing应 用 程 序 的 例 );/ 调 用 父 类 的 构 造 方 法 l1=new JLabel(一 个 GUI应 用 程 序 的 例 子 , JLabel.CENTER); / 定 义 标 签 , 文 字 居 中 l2=new JLabel( ); / 定 义 无 文 字 标 签 b1=new JButton(现 在 时 间 T);/ 定 义 按 钮 b1.setMnemonic

6、(KeyEvent.VK_T);/ 设 置 按 钮 的 快 捷 键 b1.setActionCommand(time); / 设 置 控 制 名 b1.addActionListener(this); / 注 册 按 钮 事 件 add(l1,BorderLayout.NORTH); / 添 加 标 签 l1 add(l2,BorderLayout.CENTER); / 添 加 标 签 l2 add(b1,BorderLayout.SOUTH); / 添 加 标 签 b1 / 对 按 钮 引 发 事 件 编 程 public void actionPerformed(ActionEvent e

7、) / 捕 获 按 钮 事 件 Calendar c1 = Calendar.getInstance(); / 获 取 系 统 日 期 和 事 件 if(e.getActionCommand().equals(time) / 判 断 是 否 为 所 需 的 按 钮 事 件 l2.setText(“ 现 在 时 间 是 ”+ c1.get(Calendar.HOUR_OF_DAY) +“时 ”+c1.get(Calendar.MINUTE)+“ 分 ”); /设 置 标 签 文 字 l2.setHorizontalAlignment(JLabel.CENTER); / 设 置 标 签 标 签 文

8、 字 居 中 对 齐 else System.exit(0); public static void main(String args)/ 主 方 法 JFrame.setDefaultLookAndFeelDecorated(true); / 加 此 语 句 显 示 为 运 行 结 果 图 的 右 图 JFrame frame = new SwingDemo(); / 创 建 JFrame对 象 , 初 始 不 可 见 frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);/ 设 置 框 架 关 闭 按 钮 事 件 frame.pack(

9、); / 压 缩 框 架 的 显 示 区 域 frame.setVisible(true); / 显 示 框 架 主 窗 口 v 程 序 运 行 后 显 示 的 形 式 如 下 图 。 v Java Swing GUI应 用 程 序 中 的 基 本 代 码 如 下 。v (1)引 入 合 适 的 包 和 类v 一 般 的 Swing GUI应 用 程 序 应 包 含 程 序 中 的 前 三 个引 入 语 句 , 它 们 分 别 表 示 引 入 awt包 、 awt事 件 处 理包 和 swing包 。 其 他 包 按 需 引 入 。 v 由 于 Swing组 件 使 用 AWT的 结 构 ,

10、包 括 AWT的 事 件 驱动 模 式 , 所 以 , 使 用 swing组 件 的 程 序 一 般 需 要 使用 awt包 。v (2)使 用 缺 省 的 观 感 或 设 置 自 己 的 观 感 ( Look and Feel)v (3)设 置 一 个 顶 层 的 容 器v (4)根 据 需 要 , 使 用 缺 省 的 布 局 管 理 器 或 设 置 另 外的 布 局 管 理 器v (5)定 义 组 件 并 将 它 们 添 加 到 容 器v (6)对 组 件 或 事 件 编 码 v 9.1.2 容 器 、 组 件 、 布 局 和 观 感v 1.容 器 ( Container) 和 组 件 (

11、 Component)v 一 个 Java的 图 形 用 户 界 面 的 最 基 本 元 素 是 组 件 ,组 件 是 可 以 以 图 形 化 的 方 式 显 示 在 屏 幕 上 并 能 与用 户 进 行 交 互 的 对 象 , 如 一 个 按 钮 、 一 个 文 本 框等 。 在 Java语 言 中 , 通 常 将 组 件 放 在 一 定 的 容 器内 使 用 。 容 器 实 际 上 是 一 种 具 有 容 纳 其 他 组 件 和容 器 的 功 能 的 组 件 。 抽 象 类 Container是 所 有 容器 的 父 类 , 其 中 包 含 了 很 多 有 关 容 器 的 功 能 和 方法

12、 。 而 类 Container又 是 Java语 言 的 组 件 类Component的 子 类 。 v 2.布 局 管 理 器 ( Layout Manager)v 为 了 使 得 图 形 用 户 界 面 具 有 良 好 的 平 台 无 关 性 , 在Java语 言 中 提 供 了 布 局 管 理 器 这 个 工 具 来 管 理 组 件 在容 器 中 的 布 局 , 而 不 使 用 直 接 设 置 组 件 位 置 和 大 小 的方 式 。 容 器 中 的 组 件 定 位 由 布 局 管 理 器 决 定 。 每 个 容器 都 有 一 个 缺 省 的 布 局 管 理 器 , 当 容 器 需 要

13、 对 某 个 组件 进 行 定 位 或 判 断 其 大 小 尺 寸 时 , 就 会 调 用 其 相 应 的布 局 管 理 器 。 但 也 可 以 不 用 缺 省 的 布 局 管 理 器 , 在 程序 中 指 定 其 新 的 布 局 管 理 器 。v Java平 台 提 供 多 种 布 局 管 理 器 , 常 用 的 有 FlowLayout、BorderLayout、 GridLayout、 CardLayout、BoxLayout和 GridBagLayout等 。 使 用 不 同 的 布 局 管 理器 , 组 件 在 容 器 上 的 位 置 和 大 小 都 是 很 不 一 样 的 。 v

14、在 程 序 中 安 排 组 件 的 位 置 和 大 小 时 , 应 该 注 意 :v (1)容 器 中 的 布 局 管 理 器 负 责 各 个 组 件 的 大 小 和 位 置 。因 此 用 户 无 法 在 这 种 情 况 下 直 接 设 置 这 些 属 性 。 若 试 图使 用 Java语 言 提 供 的 setLocation()、 setSize()、setBounds()等 方 法 , 则 都 会 被 布 局 管 理 器 覆 盖 。v (2)若 用 户 确 实 需 要 亲 自 设 置 组 件 的 位 置 和 大 小 , 则 应取 消 该 容 器 的 布 局 管 理 器 , 方 法 为 :

15、 setLayout(null);v 随 后 , 用 户 必 须 使 用 setLocation()、 setSize()、setBounds()等 方 法 为 组 件 设 置 大 小 和 位 置 , 但 这 种 方法 将 会 导 致 程 序 的 系 统 相 关 。v 在 一 个 GUI应 用 程 序 的 界 面 上 , 除 了 可 以 见 到 上 述 的 标准 GUI元 素 外 , 还 可 以 见 到 一 些 非 交 互 的 起 到 装 饰 、 美化 界 面 的 作 用 的 几 何 图 形 、 图 案 、 图 像 等 内 容 。 v 3.观 感 ( Look and Feel)v Java

16、swing的 一 个 重 要 特 征 是 它 的 可 插 入 的 “ 观 感 ”体 系 。 一 个 Swing应 用 程 序 或 一 个 最 终 用 户 可 指 明 所 需要 的 观 感 , 使 得 Swing应 用 程 序 的 外 观 和 行 为 都 可 以 被定 制 。 Swing运 行 一 个 缺 省 的 Java观 感 ( 也 称 为 Metal观 感 ) , 还 实 现 了 模 仿 Motif和 Windows的 观 感 。 这 样 ,一 个 Swing程 序 可 拥 有 Java程 序 的 独 特 外 观 , 也 可 以 拥有 熟 悉 的 Windows操 作 系 统 外 观 。v

17、 在 本 章 稍 后 部 分 的 单 选 按 钮 的 程 序 例 中 分 别 显 示 了Windows、 Motif和 Metal三 种 不 同 风 格 的 观 感 。v 一 般 在 应 用 程 序 的 JFrame的 构 造 方 法 中 或 在 JApplet的init()方 法 中 进 行 观 感 的 设 置 。 v 【 例 9.2】 设 置 观 感 。import javax.swing.*;import java.awt.*; public class SetLAF public static void setNativeLookAndFeel() try UIManager.setL

18、ookAndFeel(UIManager. getSystemLookAndFeelClassName(); catch(Exception e) System.out.println(设 置 native LAF错 误 : + e); public static void setJavaLookAndFeel() try UIManager.setLookAndFeel(UIManager. getCrossPlatformLookAndFeelClassName(); catch(Exception e) System.out.println(设 置 Java LAF错 误 : + e);

19、 public static void setMotifLookAndFeel() try UIManager.setLookAndFeel(“ com.sun.java.swing.plaf. motif.MotifLookAndFeel); catch(Exception e) System.out.println(设 置 Motif LAF错 误 : + e); v 因 为 setLookAndFeel()方 法 抛 出 异 常 , 因 此 设 置 观 感 的代 码 应 捕 捉 异 常 。 本 例 创 建 的 类 SetLAF可 在 以 后 的 程序 中 设 置 观 感 时 使 用 。

20、v 9.1.3事 件 处 理v 在 一 个 GUI程 序 中 , 为 了 能 够 接 收 用 户 的 输 入 、 命令 的 按 键 和 鼠 标 操 作 , 程 序 系 统 首 先 应 该 能 够 识 别这 些 操 作 并 做 出 相 应 的 响 应 。 通 常 一 个 键 盘 和 鼠 标操 作 将 引 发 一 个 系 统 预 先 定 义 好 的 事 件 , 用 户 程 序只 要 编 写 代 码 定 义 每 个 事 件 发 生 时 程 序 应 做 出 何 种响 应 即 可 。 这 些 代 码 会 在 它 们 对 应 的 事 件 发 生 时 由系 统 自 动 调 用 , 这 就 是 GUI程 序

21、中 事 件 和 事 件 响 应的 基 本 原 理 。v 在 Java语 言 中 , 除 了 键 盘 和 鼠 标 操 作 , 系 统 的 状 态改 变 也 可 以 引 发 事 件 。 v 可 能 产 生 事 件 的 组 件 称 为 事 件 源 , 不 同 事 件 源 上 发 生的 事 件 种 类 是 不 同 的 。 若 希 望 事 件 源 上 引 发 的 事 件 被程 序 处 理 , 需 要 将 事 件 源 注 册 给 能 够 处 理 该 事 件 源 上那 种 事 件 类 型 的 监 听 器 。 监 听 器 具 有 监 听 和 处 理 某 类事 件 的 功 能 , 它 可 以 是 包 容 事 件

22、 源 的 容 器 , 也 可 以 是另 外 的 对 象 。 也 就 是 说 , 事 件 源 和 事 件 处 理 是 分 开 的 ,一 般 组 件 都 不 处 理 自 己 的 事 件 , 而 将 事 件 处 理 委 托 给外 部 的 处 理 实 体 , 这 种 事 件 处 理 模 型 称 为 授 权 处 理 模型 。v 事 件 的 行 为 多 种 多 样 , 由 不 同 的 监 听 器 处 理 。 编 写 事件 处 理 程 序 首 先 应 确 定 关 注 的 事 件 属 于 何 种 监 听 器 类型 。 v 在 AWT中 , 提 供 11种 标 准 的 监 听 器 类 型 , 见 下 表 。 监

23、 听 器 适 配 器 类 注 册 方 法 ActionListener addActionListenerAdjustmentListener addAdjustmentListenerComponentListener ComponentAdapter addComponentListenerContainerListener ContainerAdapter addContainerListenerFocusListener FocusAdapter addFocusListenerItemListener addItemListenerKeyListener KeyAdapter add

24、KeyListenerMouseListener MouseAdapter addMouseListenerMouseMotionListener MouseMotionAdapter addMouseMotionListener TextListener addTextListenerWindowListener WindowAdapter addWindowListener v 在 确 定 监 听 器 类 型 后 , 要 用 事 件 源 类 的 注 册 方 法 来 注 册一 个 监 听 器 类 的 对 象 。 这 样 , 事 件 源 产 生 的 事 件 会 传 送给 已 注 册 的 处 理

25、 该 类 事 件 的 监 听 器 对 象 , 该 对 象 将 自 动调 用 相 应 的 事 件 处 理 方 法 来 处 理 该 事 件 。 具 体 的 注 册 方法 是 : 用 监 听 器 类 的 对 象 作 为 参 数 调 用 事 件 源 本 身 的addXxxListener()方 法 。 该 方 法 的 参 数 是 一 个 监 听 器 类的 对 象 , 有 多 种 形 式 。 例 如 :(1)分 离 的 监 听 器 类 , 该 类 通 常 为 继 承 相 应 事 件 适 配 器 类 的 子类 , 类 中 包 含 了 事 件 处 理 方 法 。 参 数 是 该 类 的 一 个 对 象 。(

26、2)实 现 监 听 器 接 口 , 参 数 为 this, 表 示 本 对 象 就 是 一 个 监 听器 类 的 对 象 。 在 本 类 中 包 含 事 件 处 理 方 法 。(3)有 名 内 部 类 , 参 数 形 式 为 继 承 事 件 适 配 器 类 的 子 类 对 象 ,在 子 类 中 包 含 事 件 处 理 方 法 。 (4)匿 名 内 部 类 , 参 数 形 式 为 用 new开 始 的 一 个 无 名 的 类 定 义 。其 中 包 含 事 件 处 理 方 法 。 9.2布 局 管 理 器v 在 容 器 中 所 有 组 件 的 布 局 ( 位 置 和 大 小 ) 由 布 局 管 理

27、 器来 控 制 。 在 Java语 言 中 提 供 了 FlowLayout、BorderLayout、 GridLayout、 CardLayout和GridBagLayout等 多 种 布 局 管 理 器 。v 每 种 容 器 都 有 自 己 缺 省 的 布 局 管 理 器 。 缺 省 地 , JPanel使 用 FlowLayout, 而 内 容 窗 格 ContentPanev (JApplet、 JDialog和 JFrame对 象 的 主 容 器 ) 使 用BorderLayout。 如 果 不 希 望 使 用 缺 省 的 布 局 管 理 器 , 则可 使 用 所 有 容 器 的

28、父 类 Container的 setLayout()方 法 来改 变 缺 省 的 布 局 管 理 器 。 v 1.FlowLayoutv FlowLayout布 局 是 一 种 最 基 本 的 布 局 。 这 种 布 局 指 的是 把 组 件 一 个 接 一 个 从 左 至 右 、 从 上 至 下 地 依 次 放 在容 器 上 , 每 一 行 中 的 组 件 缺 省 为 居 中 对 齐 。 当 容 器 的尺 寸 改 变 后 , 组 件 的 大 小 不 变 , 但 布 局 将 会 随 之 变 化 。v FlowLayout是 Applet和 JPanel的 缺 省 布 局 管 理 器 。Flow

29、Layout类 的 构 造 方 法 如 下 :FlowLayout() 创 建 每 行 组 件 对 齐 方 式 为 居 中 对 齐 、 组 件 间距 为 5个 像 素 单 位 的 对 象FlowLayout(int align) 创 建 指 定 每 行 组 件 对 齐 方 式 、 组 件间 距 为 5个 像 素 单 位 的 对 象 , align可 取 三 个 静 态 常 量 LEFT、CENTER和 RIGHT之 一 ( 分 别 表 示 左 、 中 、 右 对 齐 方 式 ) 。 FlowLayout(int align, int hgap, int vgap) 创 建 指 定 每行 组 件

30、 对 齐 方 式 的 对 象 , 该 对 象 也 使 用 参 数 vgap和 hgap指 定了 组 件 间 的 以 像 素 为 单 位 的 纵 横 间 距 。v 向 使 用 FlowLayout布 局 的 容 器 添 加 组 件 可 简 单 地 使 用下 面 的 语 句 : add(组 件 名 );v 2 BorderLayoutv BorderLayout 是 内 容 窗 格 的 缺 省 布 局 管 理 器 。 内 容 窗格 是 框 架 JFrame, 小 程 序 JApplet和 对 话 框 JDialog的主 容 器 。 BorderLayout将 容 器 的 布 局 分 为 五 个 区

31、 : 北区 、 南 区 、 东 区 、 西 区 和 中 区 。 这 几 个 区 的 分 布 规 律是 “ 上 北 下 南 , 左 西 右 东 ” 。 当 容 器 的 大 小 改 变 时 ,容 器 中 的 各 个 组 件 相 对 位 置 不 变 , 其 中 间 部 分 组 件 的尺 寸 会 发 生 变 化 , 四 周 组 件 宽 度 固 定 不 变 。 v BorderLayout类 的 构 造 方 法 如 下 :BorderLayout() 创 建 组 件 间 无 间 距 的 BorderLayout对 象 。BorderLayout(int hgap, int vgap) 创 建 有 指 定

32、 组 件 间距 的 对 象 。v 向 BorderLayout布 局 的 容 器 添 加 组 件 时 , 每 添 加 一个 组 件 都 应 指 明 该 组 件 加 在 哪 个 区 域 中 。 add()方 法的 第 二 个 参 数 指 明 加 入 的 区 域 , 区 域 东 南 西 北 中 可用 五 个 静 态 常 量 表 示 : BorderLayout.EAST、BorderLayout.SOUTH、 BorderLayout.WEST、BorderLayout.NORTH和 BorderLayout.CENTER。 v 【 例 9.3】 将 五 个 按 钮 加 入 BorderLayou

33、t的 五 个 区 。import java.awt.*;import javax.swing.*;public class BorderLayoutDemo extends JApplet public void init() Container c = getContentPane(); c.add(new Button(北 North), BorderLayout.NORTH); c.add(new Button(南 South), BorderLayout.SOUTH); c.add(new Button(东 East), BorderLayout.EAST); c.add(new Bu

34、tton(西 West), BorderLayout.WEST); c . a d d ( n e w B u t t o n ( 中 C e n t e r ) , BorderLayout.CENTER); v 程 序 运 行 的 结 果 见 下 图 。 v 3 GridLayoutv GridLayout布 局 是 将 容 器 的 空 间 分 成 若 干 行 和 列的 一 个 个 网 格 , 可 以 给 出 网 格 的 行 数 和 列 数 , 组件 添 加 到 这 些 网 格 中 。 当 改 变 容 器 的 大 小 后 , 其中 的 组 件 相 对 位 置 不 变 , 但 大 小 改 变

35、 。 容 器 中 各个 组 件 同 高 度 、 同 宽 度 。 各 个 组 件 缺 省 的 排 列 方式 为 : 从 上 到 下 , 从 左 到 右 。 v GridLayout类 的 构 造 方 法 如 下 :public GridLayout()创 建 单 行 每 个 组 件 一 列 的 GridLayout对象 。public GridLayout(int rows, int cols) 创 建 指 定 行 列 数的 GridLayout对 象 。public GridLayout(int rows, int cols, int hgap, int vgap)创 建 指 定 行 列 数

36、的 GridLayout对 象 。v 因 为 没 有 容 器 缺 省 使 用 GridLayout, 因 此 在 使 用GridLayout前 , 要 用 setLayout()方 法 将 容 器 的 布 局 管理 器 设 置 为 GridLayout。v 在 向 GridLayout添 加 组 件 时 , 组 件 加 入 容 器 要 按 序 进 行 ,每 个 网 格 中 都 必 须 加 入 组 件 , 若 希 望 某 个 网 格 为 空 , 可以 为 该 网 格 加 入 一 个 空 的 标 签 : add(new JLabel()。 v 【 例 9.4】 GridLayout布 局 。imp

37、ort java.awt.*;import javax.swing.*;public class GridLayoutDemo extends JApplet public void init() Container c = getContentPane(); c.setLayout(new GridLayout(3,2); c.add(new Button(1); c.add(new Button(2); c.add(new Button(3); c.add(new Button(4); c.add(new Button(5); c.add(new Button(6); v 4.CardLa

38、youtvCardLayout布 局 管 理 器 能 够 使 得 多 个 组 件 共 享 同一 显 示 空 间 , 这 些 组 件 之 间 的 关 系 像 一 叠 重 叠 的 扑克 牌 , 只 有 最 上 面 的 组 件 是 可 见 的 。 注 意 : 在 一 个显 示 空 间 ( 卡 片 ) 中 只 能 显 示 一 个 组 件 , 因 此 , 可使 用 容 器 嵌 套 的 方 法 来 显 示 多 个 组 件 。v 例 9.4运 行 的 结 果 如 下 图 所 示 。 v CardLayout类 的 构 造 方 法 如 下 :CardLayout()创 建 间 距 为 零 的 对 象 。Car

39、dLayout(int hgap, int vgap)创 建 带 有 水 平 hgap和垂 直 vgap间 距 的 对 象 。v 为 了 使 用 叠 在 下 面 的 组 件 , 可 以 为 每 个 组 件 取 一 名字 , 名 字 在 用 add()方 法 向 容 器 添 加 组 件 时 指 定 ,需 要 某 个 组 件 时 通 过 show()方 法 指 定 该 组 件 的 名 字来 选 取 它 。 也 可 以 顺 序 使 用 这 些 组 件 , 或 直 接 指 明选 取 第 一 个 组 件 ( 用 first()方 法 ) 或 最 后 一 个 组件 ( 用 last()方 法 ) 。 v

40、【 例 9.5】 CardLayout布 局 。import java.awt.*;import javax.swing.*;public class CardLayoutDemo extends JApplet CardLayout cl =new CardLayout(20,40); / 组 件 在 卡 片 中 有 边 界 JButton b1=new JButton(卡 片 一 ); JButton b2=new JButton(卡 片 二 ); JButton b3=new JButton(卡 片 三 ); public void init() getContentPane().set

41、Layout(cl); getContentPane().add(card1,b1); getContentPane().add(card2,b2); getContentPane().add(card3,b3); v 程 序 运 行 结 果 如 下 图 所 示 。 程 序 中 的 三 个 按 钮 组 件 顺序 添 加 到 卡 片 布 局 管 理 器 的 各 个 卡 片 上 , 它 们 共 享 同一 显 示 区 域 , 因 此 只 能 见 到 最 上 面 的 “ 卡 片 一 ” 按 钮 。 v 5.GridBagLayoutv GridBagLayout是 最 复 杂 也 最 灵 活 的 布

42、局 管 理 器 。 这 个布 局 管 理 器 将 组 件 放 入 单 元 格 中 , 但 允 许 一 些 组 件 跨越 单 元 格 。v 可 用 GridBagLayout类 的 构 造 方 法 GridBagLayout()来创 建 一 个 GridBagLayout布 局 管 理 器 。 因GridBagLayout布 局 设 置 比 较 复 杂 , 这 里 就 不 介 绍 了 ,请 读 者 参 看 API说 明 或 其 他 资 料 。 v 6.自 定 义 布 局 v 若 希 望 按 照 自 己 的 要 求 来 进 行 组 件 和 界 面 图 形 元 素的 布 局 , 可 用 容 器 的

43、setLayout(null)方 法 将 容 器 的布 局 管 理 器 设 置 为 空 , 然 后 用 下 面 的 方 法 设 置 组 件在 容 器 中 的 位 置 和 大 小 :setBounds(int a,int b,int width,int height)v 其 中 , 参 数 a和 b指 定 矩 形 形 状 的 组 件 左 上 角 在 容 器中 的 坐 标 , width和 height指 定 组 件 的 宽 和 高 。v 【 例 9.6】 设 置 自 己 的 布 局 管 理 器 。import java.awt.*;import javax.swing.*;class NullL

44、ayout extends JFrame NullLayout() super(建 设 自 己 的 布 局 管 理 器 ); Container c=getContentPane(); / 也 可 不 用 内 容 窗 格 c.setLayout(null); JButton jb1 =new JButton(按 钮 1); JButton jb2 =new JButton(按 钮 2); c.add(jb1);c.add(jb2); jb1.setBounds(10,10,100,30); jb2.setBounds(10,50,100,30); public static void main

45、(String args) NullLayout nl=new NullLayout(); nl.setSize(200,150); nl.setVisible(true); v 程 序 的 运 行 结 果 如 下 图 所 示 。 注 意 , 采 用 这 种 方 式的 布 局 , 组 件 的 位 置 和 大 小 将 不 随 窗 口 大 小 的 变 化而 变 化 。 下 图 为 例 9.6的 运 行 界 面 。 9.3常 用 Swing组 件v 9.3.1 容 器 组 件v 1.JFrame框 架v 框 架 , 是 JFrame类 的 对 象 , 是 swing GUI应 用 程 序 的主 窗

46、口 。 窗 口 有 边 界 、 标 题 、 关 闭 按 钮 等 。 对 Java应 用 程 序 , 应 至 少 包 含 一 个 框 架 , 例 9.1的 应 用 程 序即 使 用 了 框 架 。 有 时 , 小 程 序 也 使 用 框 架 。 JFrame类 继 承 于 Frame类 。 JFrame类 的 构 造 方 法 如 下 :JFrame() 创 建 无 标 题 的 初 始 不 可 见 框 架 。JFrame(String title) 创 建 标 题 为 title的 初 始 不 可 见 框架 。 v 例 如 , 创 建 带 标 题 “ Java GUI应 用 程 序 ” 的 框 架

47、 对 象frame, 可 用 语 句 : JFrame frame = new JFrame(Java GUI应 用 程 序 );v 要 显 示 框 架 对 象 代 表 的 框 架 窗 口 , 可 使 用 方 法setVisible()。 可 用 语 句 : frame.setVisible(true);v 可 使 得 JFrame类 对 象 frame表 示 的 框 架 窗 口 显 示 到 屏 幕上 。 一 般 在 显 示 框 架 前 , 可 设 置 框 架 的 初 始 显 示 大 小可 使 用 setSize()方 法 或 pack()方 法 。 例 如 : frame.setSize(2

48、00,150); / 设 置 框 架 窗 口 初 始 大 小 为 200150点 frame.pack(); / 设 置 框 架 窗 口 初 始 大 小 为 刚 好 只 显 示 出 所 有 的 组 件 。 v 在 向 框 架 添 加 组 件 时 , 并 不 直 接 添 加 组 件 到 框 架 ,而 是 添 加 到 内 容 窗 格 ( content pane) , 改 变 其 他特 性 ( 布 局 管 理 器 、 背 景 色 等 ) 也 对 内 容 窗 格 进 行 。要 存 取 内 容 窗 格 , 可 通 过 getContentPane()方 法 , 若 希 望 用 自 己 的 容 器 替

49、换 掉 内 容 窗 格 ( 例 如 用JPanel) , 可 以 使 用 setContentPane()方 法 。 v 选 择 框 架 的 关 闭 按 钮 后 , 框 架 窗 口 将 自 动 关 闭 , 但若 是 应 用 单 个 框 架 的 应 用 程 序 , 为 了 在 选 择 框 架 的关 闭 按 钮 时 能 退 出 程 序 , 应 添 加 WindowListener监听 器 或 书 写 下 列 代 码 :frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); v JFrame的 缺 省 观 感 为 Java (Metal), 若

50、要 使 用 其 他的 观 感 , 必 须 显 式 设 置 。 JFrame( 应 该 说 是 内 容 窗格 ) 的 缺 省 布 局 管 理 器 是 BorderLayout。v 2. JPanel面 板v JPanel是 一 种 添 加 到 其 他 容 器 使 用 的 容 器 组 件 , 可将 组 件 添 加 到 JPanel, 然 后 再 将 JPanel添 加 到 某 个容 器 。 JPanel也 提 供 一 个 绘 画 区 域 , 可 代 替 AWT的 画布 Canvas ( 没 有 JCanvas) 。 v j a v a x . s w i n g . J P a n e l 类 继

51、 承 于javax.swing.JComponent类 , 其 构 造 方 法 有 :public JPanel() 创 建 具 有 缺 省 FlowLayout布 局 的 JPanel对象 。public JPanel(LayoutManager layout) 创 建 具 有 指 定 布 局管 理 器 的 JPanel对 象 。v 将 JPanel作 为 画 布 的 绘 画 区 域 使 用 时 , 要 使 用 下 面 的两 个 步 骤 : 首 先 , 设 置 画 布 绘 图 区 域 的 大 小 ; 其 次 ,使 用 paintComponent()方 法 ( 不 是 paint()方 法

52、) 来 绘图 , 在 该 方 法 体 中 , 首 先 调 用 方 法super.paintComponent( ) 来 清 除 显 示 区 域 。 v 例 如 : public void paintComponent(Graphics g) super.paintComponent(g); . v JPanel可 指 定 边 界 , 可 用 的 边 界 有 titled、 etched、beveled 、 line、 matte、 compound和 empty等 , 也 可以 创 建 自 己 的 边 界 。 可 用 JComponent类 的 setBorder()方 法 设 置 边 界 。

53、 其 用 法 如 下 : public void setBorder(Border border)v 其 中 , B o r d e r 类 的 参 数 可 用javax.swing.BorderFactory类 中 的 方 法 获 得 。 获 取 各种 相 应 边 界 的 方 法 为 : createTitledBorder() createEtchedBorder()createBevelBorder() createRaisedBevelBorder() createLoweredBevelBorder() createLineBorder()createMatteBorder() cr

54、eateCompoundBorder()createEmptyBorder()v 【 例 9.7】 使 用 JPanel。import java.awt.*;import javax.swing.*;class JPanelDemo extends JPanel JButton b1 = new JButton(JPanel); JButton b2 = new JButton(Demo); public JPanelDemo() setBackground(Color.white); add(b1); add(b2); public static void main(String args)

55、 JPanel jp = new JPanelDemo(); jp.setBorder( BorderFactory.createTitledBorder( Hello,Border); JFrame frame = new JFrame(JPanelDemo); frame.setSize(200, 150); frame.setContentPane(jp); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); frame.setVisible(true); v例 9.7程 序 运 行 结 果 如 下 图 所 示 。 v 3.JAp

56、pletv javax.swing.JApplet类 是 java.applet.Applet类 的子 类 。 使 用 Swing组 件 的 小 程 序 需 继 承 JApplet类 。v 除 了 所 处 的 java包 不 同 外 , JApplet与 Applet的 主要 区 别 还 有 :v (1)缺 省 的 布 局 管 理 器 不 同v Applet缺 省 的 布 局 管 理 器 是 FlowLayout, 而JApplet( 内 容 窗 格 ) 缺 省 的 布 局 管 理 器 是BorderLayout。 v (2)加 入 组 件 的 方 式 不 同v Applet可 直 接 加 入

57、 组 件 , 而 JApplet缺 省 使 用 内 容 窗格 ContentPane作 为 主 容 器 。 加 入 Swing组 件 时 , 要先 使 用 JApplet的 方 法 getContentPane()获 得 一 个Container对 象 , 再 调 用 这 个 对 象 的 add()方 法 将Swing组 件 加 入 到 JApplet的 容 器 中 。v 4.JTabbedPanev javax. javax.swing.JTabbedPane类 继 承 于javax.swing.JComponent, 它 的 对 象 反 映 为 一 组 带标 签 的 面 板 , 每 个 面

58、 板 都 可 以 存 放 组 件 , 因 此JTabbedPane是 一 容 器 组 件 。 v JTabbedPane类 的 构 造 方 法 有 :JTabbedPane()创 建 空 对 象 , 该 对 象 具 有 缺 省 的 标 签 位 置JTabbedPane.TOP和 缺 省 的 布 局 策 略JTabbedPane.WRAP_TAB_LAYOUT。JTabbedPane(int tabPlacement)创 建 空 对 象 , 该 对 象 具 有指 定 的 标 签 位 置 : JTabbedPane.TOP、 JTabbedPane.BOTTOM、JTabbedPane.LEFT或

59、 JTabbedPane.RIGHT以 及 缺 省 的 布 局 策略 JTabbedPane.WRAP_TAB_LAYOUT。JTabbedPane(int tabPlacement, int tabLayoutPolicy)创 建 空 对 象 , 该 对 象 具 有 指 定 的 标 签 位 置 和 布 局 策 略 。 v【 例 9.8】 使 用 JTabbedPane容 器 。import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;public class JTabbe

60、dPaneDemo public static void main(String args) new MyTabbedPane(); class MyTabbedPane extends JFrame implements ChangeListener,ActionListener JTabbedPane jt; JButton jb; int index = 0; MyTabbedPane() super(使 用 标 签 面 板 容 器 ); jt = new JTabbedPane(); jb = new JButton5; for(int i = 0;i5;i+) jbi = new J

61、Button(第 + i + 页 面 板 ); jbi.addActionListener(this); jt.addTab(页 标 签 + i,jbi); jt.addChangeListener(this); getContentPane().add(jt,BorderLayout.CENTER); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300,200); setVisible(true); public void stateChanged(ChangeEvent e) if(e.getSource()=jt) in

62、t i = (JTabbedPane)e.getSource() .getSelectedIndex(); jbindex.setVisible(false); jbi.setVisible(true); index = i; public void actionPerformed(ActionEvent e) setTitle(“ 响 应 单 击 ” +(JButton)e.getSource().getText(); v 例 9.8运 行 结 果 如 下 图 所 示 。 v 9.3.2 按 钮 ( JButton)v 按 钮 是 GUI中 非 常 重 要 的 一 种 基 本 组 件 。 按

63、 钮 一 般对 应 一 个 事 先 定 义 好 的 事 件 、 执 行 功 能 、 一 段 程 序 。当 使 用 者 单 击 按 钮 时 , 系 统 自 动 执 行 与 该 按 钮 联 系的 程 序 , 从 而 完 成 预 定 的 功 能 。v JButton类 提 供 对 按 钮 的 支 持 , 它 的 类 层 次 关 系 如下 : java.awt.Container javax.swing.JComponent javax.swing.AbstractButton javax.swing.JButton v JButton类 有 如 下 的 构 造 方 法 :JButton() 创 建

64、空 按 钮 。JButton(Icon icon) 创 建 带 图 标 的 按 钮 。JButton(String text) 创 建 带 文 字 的 按 钮 。JButton(String text, Icon icon) 创 建 带 文 字 和 图 标 的 按钮 。v JButton组 件 与 AWT的 Button组 件 相 比 , 增 加 了 显 示 文本 中 可 用 HTML标 记 , 可 带 图 标 等 功 能 。v 在 JButton按 钮 的 使 用 中 , 常 用 到 继 承 来 的s e t M n e m o n i c ( ) ( 设 置 快 捷 字 母 键 ) 、se

65、tActionCommand()( 设 置 动 作 命 令 ) 方 法 等 。v JButton组 件 引 发 的 事 件 为 ActionEvent, 可 实 现ActionListener监 听 器 接 口 的 actionPerformed()方 法 ,用 a d d A c t i o n L i s t e n e r ( ) 方 法 注 册 , 用getActionCommand()或 getSource()方 法 确 定 事 件 源 。 v 【 例 9.9】 设 计 一 个 GUI应 用 程 序 , 有 两 个 标 签 l1、 l2和 三 个 按 钮 b1,b2,b3。 l1标

66、签 显 示 固 定 的 文 字 , l2标签 的 文 字 随 选 择 不 同 的 按 钮 而 变 化 ; 选 择 b1按 钮 时 ,l2标 签 显 示 为 “ 欢 迎 进 入 Java世 界 ” ,选 择 b2按 钮 时 ,l2标 签 显 示 当 前 的 日 期 ,选 择 b3按 钮 时 , 退 出 该 应 用 程序 。 程 序 如 下 :import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;public class JButtonDemo extends Jpanel implements ActionListener JButton b1,b2,b3; static JLabel l1,l2; JButtonDemo() l1 = new JLabel( 这 是 一 个 演 示 按 钮 动 作 的 程 序 ,JLabel.CENTER); l2 = new JLabel( ,JLabel.CENTER); b1 = new JButton(欢 迎 w); b1.setMne

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!