《java基础教程》第四章 java应 用 程 序 的 基 本 框 架_第1页
《java基础教程》第四章 java应 用 程 序 的 基 本 框 架_第2页
《java基础教程》第四章 java应 用 程 序 的 基 本 框 架_第3页
《java基础教程》第四章 java应 用 程 序 的 基 本 框 架_第4页
《java基础教程》第四章 java应 用 程 序 的 基 本 框 架_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第 四 章 Java 应 用 程 序 的 基 本 框 架 学 习 一 门 新 语 言 最 好 是 先 看 几 个 简 单 的 程 序 例 子。 下 面 我 们 将 看 到 几 个 非 常 基 本 的 程 序 例 子。 4.1 Java 应 用 程 序 的 运 行 环 境 Java 应 用 程 序 是 指 可 以 独 立 运 行 在 Java 虚 拟 机 上 的 程 序, 它 是 一 种 中 间 代 码(byte-code?copy;。 比 如 你 的 应 用 程 序 叫 my.java, 程 序 里 有 一 个 名 称 为 app1 的 类, 用 Javac 或 其 它 编 译 器, 编 译 后 将 会 生 成 app1.class, 则 在 命 令 行 状 态 下 输 入:java app1 就 可 以 运 行 此 程 序。 注 意, 用 java 命 令 运 行 的 类 必 须 有 main 函 数, 否 则 不 能 执 行。 与 普 通 java 应 用 程 序 不 同 的 另 一 种 另 一 种 Java 程 序 叫 Java Applet。 我 们 把 它 译 成 Java 小 程 序, 这 种 程 序 后 缀 也 是.class, 但 它 不 能 直 接 在 java 虚 拟 机 上 运 行, 也 就 是 输 入 java *.class 不 能 运 行, 这 种 程 序 里 可 以 没 有 main 函 数, 它 必 须 由 某 个 浏 览 器 来 运 行, 比 如 Appletviewer 或 Netscape2.02 以 上 等。 这 种 程 序 我 们 将 在 后 面 章 节 中 介 绍。 4.2 最 简 单 的 Java 程 序 解 释 让 我 们 来 看 一 看 最 简 单 的 Java 应 用 程 序 例 子, 来 理 解 一 下 它 的 结 构: Filename:1.java class myfirst public static void main(String args ) System.out,println (“This is my first Java Application“); 这 就 是 一 个 完 整 的 Java 应 用 程 序, 将 它 编 译: Javac 1.java 在 当 前 目 录 下, 它 将 生 成 myfirst.class 文 件, Java myfirst 屏 幕 上 将 会 输 出: This is my first Java Application 让 我 们 来 一 步 一 步 分 析 每 句 话 含 义 (1?copy; class myfirst 这 一 行 用 关 键 词 class 来 定 义 名 为 myfirst 的 新 类, myfirst 是 新 类 的 名 称, 必 须 是 一 个 有 效 的 标 识 符, 有 效 标 识 符 定 义 请 见 程 序 设 计 基础章 节。 类 的 说 明 包 括 数 据 说 明 和 成 员 函 数 说 明, 都 放 在 类 后 面 的 大 括 号 里 面。 一 般 类 定 义 如 下: class 类 名 称 数 据 定 义; 函 数 定 义; ( 2 )public static void main (String args ) public 是 一 个 表 示 访 问 权 限 的 关 键 字, 表 示 此 成 员 函 数 是 公 有 的, 可 以 被 其 他 类 直 接 调 用, 包 括 java 解 释 器。 相 对 应 的 关 键 字 有 private 和 protected,friend。private 表 示 只 能 被 本 类 访 问, protected 表 示 只 能 被 子 类 访 问,friend 是 缺 省 的 访 问 权 限, 表 示 能 被 本 包(package)中 任 意 类 访 问, 对 其 它 包 中 的 类 是 不 可 访 问 的。 static 表 示 main 成 员 函 数 在 myfirst 类 的 所 有 对 象 中 是 唯 一 的, 因 此 如 果 本 程 序 生 成 另 一 个 myfirst 类 对 象, 调 用 的 main 函 数 将 是 同 一 个 函 数。 void 表 示 main 函 数 没 有 返 回 值, 如 果 有 返 回 类 型 值, 则 可 加 上 interger 或 boolean 诸 如 此 类, 对 于 有 返 回 值 的 函 数, 其 函 数 实 体 的 最 后 应 加 上 return 语 句。 main 这 个 函 数 是 这 运 行 应 用 程 序 的 入 口 点, 因 此 编 写 应 用 程 序 是 必 须 有 main( )函 数, 且 是 唯 一 的。 (3?copy; System.out.println 一 句 这 一 句 是 main 函 数 里 的 功 能 语 句, 是 调 用 Java 里 System 包 里 的 out 类 的 println 成 员 函 数, 是 标 准 输 入 输 出。 4.3 Java 应 用 程 序 参 数 的 传 递 Java 语 言 很 类 似 C 和 C+语 言。 在 C 语 言 里, 通 过 在 命 令 行 输 入 参 数,C 程 序 可 由 main 函 数 读 入 这 ?copy; 参 数,java 程 序 也 一 样, 请 看 下 面 程 序: Filename:2.java class My2 public static void main (String args ) int arc = args.length; if (arc0) for (int i =0;i ) m = new Memo(args0); else m = new Memo(); m.start(); 将 Frame 联 系 起 来 l 熟 悉 的 函 数 paint()和 mouseDown(), 看 起 来 有 点 眼 熟。 这 ?copy; 函 数 与 applet 的 函 数 一 样。 实 际 上, 一 个 frame 包 含 各 种 GUI 组 件 与 applet 的 形 式 一 样。 另 一 个 熟 悉 的 函 数 是 start()。 这 个 函 数 并 不 必 要, 因 为 我 们 没 有 覆 盖 任 何 已 存 在 的 函 数。 但 你 想 继 承 applet 编 程 的 风 格, 你 还 是 可 以 使 用 start(),stop(),init()与 destroy()等 函 数。 l 新 函 数 我 们 熟 悉 的 函 数 start()调 用 了 show()。show()函 数 是 Window 类 的 继 承, 它 显 示 Fame 及 其 所 有 组 件。 在 mouseDown()函 数 里 我 们 看 到 两 个 函 数:hide()和 dispose()。hide()只 简 单 地 使 Frame 不 可 见。 你 可 以 在 任 何 时 候 调 用 它 来 隐 藏 窗 口。 dispose()函 数 释 放 由 Frame 占 有 的 系 统 资 源。 只 有 在 你 不 需 要 Frame 时 才 调 用 它。 l 构 造 函 数 Memo 例 子 还 包 含 了 一 个 新 函 数 Memo()。 其 实 这 个 类 有 两 个 Memo()函 数! 任 何 与 类 名 相 同 的 函 数 都 是 构 造 函 数。 它 在 创 建 一 个 新 对 象 时 被 调 用。 你 可 以 认 为 它 是 一 个 对 象 的 init()初 始 化 函 数。 为 什 么 需 要 两 个 构 造 函 数 呢? 有 了 两 个 构 造 函 数, 我 们 可 以 利 用 多 态 性 的 优 点, 有 两 种 方 法 创 建 一 个 新 Memo 对 象。 我 们 可 以 简 单 的 创 建 使 用 缺 省 信 息 的 Memo 对 象: m = new Memo(); 或 者, 我 们 可 以 自 己 提 ?copy; 信 息: m = new Memo(“Our message“); Frame 控 制 本 程 序 的 最 后 功 能 是 在 main()里 建 立 并 显 示 frame。 它 由 以 下 两 步 实 现: /Step 1 m = new Memo(); /Step 2 m.start(); 第 一 步 初 始 化 memo 对 象。 我 们 象 操 作 其 它 对 象 一 样 操 作 m。 为 显 示 frame, 我 们 需 要 调 用 show()。 这 在 第 二 步 里 实 现。 另 一 个 要 注 意 的 是 程 序 的健 壮 性: 我 们 基 本 的 frame 里 没 有 包 含 处 理 标 准 WINDOW_DESTROY 消 息 的 函 数。 这 样, 你 将 不 能 在 窗 口 的 控 制 菜 单 里 选 中“Quit“或“Exit“。 为 了 增 加 这 个 功 能, 你 需 要 增 加 以 下 的 处 理 程 序: public boolean handleEvent (Event e) if (e.id = Event.WINDOW_DESTROY) dispose(); System.exit(1); return true; else /Go ahead and do what we normally would have done return super.handleEvent(e); 菜 单 图 形 界 面 依 靠 菜 单 来 指 导 用 户 操 作。 设 计 独 立 的 Java 应 用 程 序 时,Java 提 ?copy; 创 建 和 使 用 菜 单 的 直 接 方 法。 象 其 它 组 件 一 样,new 将 创 建 一 个 菜 单: Menu optionMenu; optionsMenu = new Menu(“Options“); 菜 单 项 一 ?copy; 你 创 建 了 一 个 菜 单, 你 可 以 使 用 add()来 组 建 菜 单 项: optionsMenu.add(new MenuItem(“Option1“);optionsMenu.add(new MenuItem(“Option2“); 菜 单 事 件 当 你 选 中 某 个 菜 单 项 时, 你 创 建 此 菜 单 项 的 字 符 ?reg; 将 在 事 件 中 返 回。 你 可 以 象 测 试 按 钮 选 择 一 样 测 试 菜 单 选 择: public boolean action (Event e, Object arg) . if (e.target instanceof MenuItem) System.out.println(String) arg); . 其 它 菜 单 项 除 了 上 面 描 述 的 简 单 菜 单 项 外, 你 还 可 增 加 CheckBox 菜 单 项, 分 割 线, 以 及 子 菜 单。 下 面 是 一 ?copy; 例 子: Menu m,n; m = new Menu(“Examples“); m.add(new MenuItem(“Basic“); m.add(new MenuItem(“Simple“); /add a separator m.add(new MenuItem(“-“); /add a Checkbox item m.add(new CheckboxMenuItem(“Check“); /add a submenu n = new Menu(“More Examples“); n.add(new MenuItem(“Sub Basic“); n.add(new MenuItem(“Sub Simple“); m.add(n); 菜 单 条 你 创 建 好 菜 单 后, 你 应 将 ?reg; 放 在 应 用 程 序 的 菜 单 条 上: mb = new Menubar(); mb.add(m); mb.add(optionsMenu); 然 后 你 可 为 applet 设 置 菜 单 条: setMenuBar(mb); 4.5 独 立 应 用 程 序 例 子 为 了 看 一 个 更 复 杂 的 独 立 的 图 形 界 面 应 用 程 序, 下 面 有 一 个 数 字 转 换 的 例 子: import java.awt.*; public class d2x extends Frame int decimalValue= 0; String baseXValue = new String (“0“); TextField dDisplay,xDisplay; /d2x constructor public d2x() super(“Decimal Converter“); /set the title of the frame MenuBar mb = new MenuBar(); Button d2Binary = new Button(“Binary“); Button d2Octal = new Button(“Octal“); Button d2Hex = new Button(“Hex“); Button d2Base36 = new Button(“Base36“); Panel p1 = new Panel(); Panel p2 = new Panel(); Panel p3 = new Panel(); /add a simple menu Menu m = new Menu(“Application“); m.add(new CheckboxMenuItem(“Base 36 Active“); m.add(new MenuItem(“Exit“); /add menu to menubar mb.add(m); setMenuBar(mb); /install this menu bar in the frame /Add buttons to their own panel p3.setLayout(new FlowLayout(); p3.add(d2Binary); p3.add(d2Octal); p3.add(d2Hex); p3.add(d2Base36); /Add text fields Label dLabel = new Label(“Enter Deecimal: “); Label xLabel = new Label(“Converted Value: “); dDisplay = new TextField(integer.toString(decimalValue),7); xDisplay = new TextField(baseXValue,32); xDisplay.setEditable(false); p1.setLayout(new FlowLayout(FlowLayout.LEFT); p2.setLayout(new FlowLayout(FlowLayout.LEFT); p1.add(dLabel); p1.add(dDisplay); p2.add(xLabel); p2.add(xDisplay); /Add the panels add(“North“,p1); add(“Center“,p2); add(“South“,p3); /end d2x constructor public void start() resize(400,150); show(); public void updateXDisplay() xDisplay.setText(baseXValue); public boolean handleEvent(Event evt) if (evt.targt intanceof MenuItem) if (“Exit“.equals(MenuItem)evt.target).getLabel() hide(); dispose(); System.exit(0); return false; retrun true; else if (evt.target instanceof Button) String whick = (Button)evt.target).getLabel(); if (whick.equals(“Binary“) decimalValue = Integer.parseInt(dDisplay.getText(); baseXValue = Interger.toString(decimalValue,2); if (whick.equals(“Octal“) decimalValue = Integer.parseInt(dDisplay.get

温馨提示

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

评论

0/150

提交评论