Java 软 件 设 计 基 础 Applet 程 序
1.Applet 概 念 Applet 与 Application Application 是 能 独 立 运 行 的 程 序 单 位 ; Applet 程 序 不 能 独 立 运 行, 必 须 依 附 在 网 页 上, 借 助 于 浏 览 器 才 能 运 行 通 常 置 于 服 务 器 端, 当 用 户 连 接 到 该 网 页,Applet 程 序 就 会 自 动 随 着 网 页 一 起 下 载 到 用 户 的 计 算 机 上 运 行
Applet 类 Java 提 供 了 java.applet.applet 类, 用 来 处 理 Applet 程 序 的 运 行 继 承 关 系 如 下 : Applet 类 提 供 了 Applet 程 序 与 所 执 行 环 境 间 的 标 准 接 口, 同 时 还 提 供 了 Applet 程 序 在 浏 览 器 上 执 行 的 架 构 Applet 类 提 供 了 四 个 主 要 方 法 : init() 方 法 : 是 Applet 激 活 时 调 用 的 方 法, 仅 执 行 一 次, 其 功 能 是 对 Applet 进 行 初 始 化 操 作 ;
start() 方 法 : 被 加 载 时 调 用 的 方 法, 在 第 一 次 调 用 init() 方 法 或 重 新 被 加 载 时 都 会 执 行 该 方 法 ; stop() 方 法 : 离 开 Applet 所 在 的 网 页 调 用 该 方 法 ; destroy() 方 法 : 离 开 浏 览 器 时 调 用 的 方 法, 在 stop() 方 法 之 后 执 行, 将 释 放 被 Applet 占 用 的 资 源 流 程 如 下 :
HTML 中 的 Applet 格 式 说 明 : code 语 句 : 包 含 Applet 程 序 的 主 类 字 节 码 文 件, 主 类 文 件 名 与 程 序 名 一 致 ; width 与 height:applet 运 行 环 境 的 窗 口 宽 / 高 度, 以 像 素 为 单 位 ;
codebase:applet 的 URL 是 主 类 文 件 所 在 的 位 置, 一 般 式 用 户 计 算 机 上 的 路 径 或 网 上 的 网 址 ; alt: 当 浏 览 器 不 支 持 Applet 的 显 示 时, 则 在 浏 览 器 上 显 示 的 辅 助 文 本 ; name: 为 Applet 设 置 的 一 个 符 号 名 称, 同 一 网 页 上 的 两 个 或 以 上 的 Applet 要 相 互 参 考 时 可 以 使 用 该 符 号 名 称 定 位 ; align:applet 在 网 页 上 的 对 齐 方 式 ; vspace: 设 置 Applet 所 保 留 的 左 右 宽 度, 只 在 align 设 置 为 left right 时 有 效 ; hspace: 设 置 Applet 所 保 留 的 上 下 宽 度, 只 在 align 设 置 为 top bottom 时 有 效 ; param: 包 含 参 数 名 字 以 及 参 数 值, 由 Applet 代 码 接 收 并 分 析 对 应 的 参 数
Applet 的 创 建 与 运 行 创 建 方 法 与 Application 类 似, 编 写 源 程 序 以 后 编 译 产 生 字 节 码 文 件 由 于 Applet 程 序 不 能 独 立 运 行, 因 此 还 要 将 其 字 节 码 文 件 嵌 入 HTML 文 件 中, 借 助 于 浏 览 器 运 行 并 显 示 结 果 编 写 必 须 通 过 import 语 句 加 载 类 Applet; 定 义 一 个 继 承 自 Applet 的 类, 程 序 代 码 编 写 在 该 类 中 Applet 加 载 和 运 行 步 骤 浏 览 器 加 载 指 定 URL 中 的 HTML 文 件 ; 浏 览 器 解 析 HTML 文 件 ; 浏 览 器 加 载 HTML 文 件 中 的 指 定 Applet 类 ; 通 过 浏 览 器 在 Java 运 行 环 境 下 运 行 Applet 程 序
Applet 的 运 行 方 法 使 用 appletviewer 来 执 行 内 嵌 Applet 的 网 页 ; 使 用 安 装 JVM 的 IE 中 直 接 运 行 实 例
2.Applet 具 体 应 用 Applet 图 形 绘 制 使 用 光 栅 图 形 软 件 包 绘 制 图 形 绘 制 图 形 一 般 使 用 光 栅 图 形 软 件 包 Java 的 Graphics 类 由 java.lang.object 类 派 生 而 来, 是 Java 绘 图 的 核 心 直 接 使 用 该 类 中 的 方 法 可 以 绘 制 图 形 实 例
在 网 页 中 用 鼠 标 绘 制 图 形 结 合 鼠 标 事 件, 当 鼠 标 在 Applet 窗 口 按 下 键 时 绘 制 实 例
当 启 动 浏 览 器 时, 浏 览 器 就 调 用 init() 方 法 初 始 化 Applet 程 序, 接 着 就 开 始 启 动 程 序 浏 览 器 会 自 动 找 到 程 序 中 的 paint() 方 法 对 图 像 进 行 绘 制, 所 以 paint() 是 浏 览 器 调 用 的, 并 且 是 自 动 调 用 的, 不 必 手 动 去 调 用 repaint 有 选 择 的 调 用 update 或 者 paint; 对 于 轻 量 级 组 件,repaint 会 调 用 paint; 而 对 于 重 量 级 组 件, 会 调 用 update update 一 般 的 工 作 是 清 屏 然 后 paint 一 般 情 况 下 可 根 据 自 己 的 需 要 重 写 paint 或 update 方 法
Applet 图 像 处 理 Java 中 可 以 直 接 载 入 并 输 出 图 像 实 例
import java.awt.*; import java.awt.event.*; import java.applet.applet; public class AppEx1 extends Applet implements MouseMotionListener,MouseListener{ Image img; int x=70,y=60,posx=70,posy=60,dx,dy; public void init(){ img=getimage(getcodebase(),"2.jpg"); addmouselistener(this); addmousemotionlistener(this); public void mousepressed(mouseevent e){dx=e.getx()-posx; dy=e.gety()-posy; public void mousedragged(mouseevent e){ x=e.getx()-dx; y=e.gety()-dy; if(dx>0&&dx<50&&dy>0&&dy<70){ Graphics g=getgraphics(); update(g); public void mousemoved(mouseevent e){ public void mouseentered(mouseevent e){ public void mouseexited(mouseevent e){ public void mousereleased(mouseevent e){ public void mouseclicked(mouseevent e){ public void paint(graphics g) { g.drawimage(img,x,y,50,70,this); posx=x; posy=y;
Applet 声 音 技 术 import java.awt.*; import java.awt.event.*; import java.applet.applet; import java.applet.audioclip; public class AppEx1 extends Applet implements ItemListener,ActionListener{ Label l1=new Label("Audio Example"); AudioClip sound; Choice c=new Choice(); Button play=new Button("play");Button loop=new Button("loop");Button stop=new Button("stop"); public void init(){ add(l1);c.add("tada.wav");c.add("start.wav");c.add("notify.wav");add(c); c.additemlistener(this);add(play);add(loop);add(stop); play.addactionlistener(this);loop.addactionlistener(this);stop.addactionlistener(this); sound=getaudioclip(getcodebase(),"ding.wav"); public void itemstatechanged(itemevent e){ sound.stop(); sound=getaudioclip(getcodebase(),c.getselecteditem()); public void actionperformed(actionevent e){ if(e.getsource()==play) sound.play(); else if(e.getsource()==loop) sound.loop(); else if(e.getsource()==stop) sound.stop();
Applet 动 画 制 作 概 述 getimage() 把 一 个 图 像 文 件 加 载 到 Java 程 序,drawImage() 把 加 载 的 图 像 输 出 到 Applet 窗 口 当 加 载 的 不 是 一 张 图 像, 而 是 一 组 图 像, 并 依 次 每 隔 一 段 时 间 显 示, 就 能 实 现 动 画 片 段 的 制 作 相 同 时 间 内 放 映 的 图 像 张 数 越 多, 动 画 看 上 去 就 越 平 滑 连 贯, 因 此 Java 需 要 通 过 时 钟 控 制 图 片 切 换 的 速 度 Java 支 持 多 线 程, 用 线 程 进 行 计 时 是 最 好 的 解 决 方 法 由 于 Java 不 支 持 多 继 承, 因 此 在 Applet 中 要 实 现 多 线 程, 则 必 须 通 过 实 现 Runnable 接 口 的 继 承 自 Applet 类 的 子 类 来 完 成 步 骤 Applet 实 现 Runnable 接 口 :
在 start() 方 法 中 产 生 一 个 新 线 程 Java 的 线 程 也 被 当 作 一 个 类, 类 Thread 封 装 了 所 有 有 关 线 程 的 控 制, 用 来 控 制 线 程 的 运 行 睡 眠 挂 起 和 中 止 上 段 程 序 中 start() 方 法 产 生 了 一 个 新 线 程, 当 start() 执 行 完 后, 程 序 里 就 有 了 两 个 线 程 同 时 工 作, 一 个 是 原 来 的 线 程, 一 个 是 由 start() 产 生 的 线 程 在 stop() 方 法 中 结 束 一 个 线 程 stop() 方 法 将 start() 产 生 的 线 程 关 闭 终 止 并 释 放 线 程
run() 方 法 给 新 线 程 分 配 任 务 run() 方 法 是 线 程 的 核 心, 将 写 入 新 线 程 工 作 的 代 码, 而 原 来 的 线 程 不 受 影 响, 因 为 它 们 是 两 个 完 全 独 立 的 线 程, 互 不 干 扰 run() 方 法 中 的 代 码 执 行 结 束, 线 程 即 终 止
public void start(){ if(thd==null){ thd=new Thread(this); thd.start(); public void stop(){ if(thd!=null){ thd.stop(); thd=null; public void run(){ while(true){ try{thread.sleep(pause); catch(interruptedexception e){ repaint(); num=(num+1)%img.length; public void paint(graphics g){g.drawimage(img[num],0,0,this); public void update(graphics g){paint(g);
3. 安 全 性 出 于 安 全 性 考 虑, 为 applet 添 加 以 下 限 制 : 不 允 许 applet 读 写 计 算 机 的 文 件 系 统, 否 则, 它 们 可 能 会 破 坏 文 件 并 传 播 病 毒 ; 不 允 许 applet 运 行 浏 览 器 所 在 的 计 算 机 上 的 任 何 程 序, 否 则, 它 可 能 调 用 具 有 破 坏 能 力 的 本 地 程 序 并 破 坏 用 户 计 算 机 的 本 地 系 统 ; 除 了 存 储 applet 的 服 务 器 之 外, 不 允 许 applet 建 立 用 户 计 算 机 与 其 他 计 算 机 的 连 接, 该 限 制 是 为 了 防 止 在 用 户 不 知 道 的 情 况 下, applet 将 用 户 计 算 机 与 另 一 台 计 算 机 相 连 一 般 来 说,applet, 都 能 转 化 为 应 用 程 序 而 无 需 损 失 任 何 功 能 只 要 不 违 反 以 上 加 在 applet 上 的 安 全 限 制
可 在 applet 上 实 现 main 方 法, 使 得 applet 可 以 两 种 方 式 运 行 public static void main(string args[]){ 创 建 框 架 ; 创 建 Applet 实 例 ; 将 该 Applet 对 象 加 入 到 框 架 中 ; 设 置 框 架 的 各 种 属 性, 如 大 小 布 局, 背 景 色 等 等 ; applet.init(); applet.start(); 将 框 架 设 置 为 可 见 ;
3.JApplet 概 况 Applet 类 是 一 个 AWT 类, 设 计 它 时 没 有 考 虑 与 Swing 组 件 一 起 工 作 要 在 Java applet 中 使 用 Swing 组 件, 需 要 通 过 扩 展 javax.swing.japplet 类 创 建 JApplet 继 承 了 Applet 类 的 所 有 方 法, 而 且 支 持 放 置 Swing 组 件