首页 第11章 Java小程序Applet

第11章 Java小程序Applet

举报
开通vip

第11章 Java小程序Applet 第 11 章 Java 小程序 Applet 本章目的: Java 语言的特性使它可以最大限度地利用网络。 Applet 是 Java 语言中的 小应用程序,它是一种动态、安全、跨平台的网络应用程序。 Java Applet被程 序员嵌入到 HTML 语言中,并通过网页发布到 Internet。当网络用户使用浏览 器访问此类网页时,假如浏览器内置有 Java虚拟机(JVM,Java Virtual Machine), 它将下载并运行服务器上上的 Java Applet。由于 Java语言的安全机制,用户...

第11章 Java小程序Applet
第 11 章 Java 小程序 Applet 本章目的: Java 语言的特性使它可以最大限度地利用网络。 Applet 是 Java 语言中的 小应用程序,它是一种动态、安全、跨平台的网络应用程序。 Java Applet被程 序员嵌入到 HTML 语言中,并通过网页发布到 Internet。当网络用户使用浏览 器访问此类网页时,假如浏览器内置有 Java虚拟机(JVM,Java Virtual Machine), 它将下载并运行服务器上上的 Java Applet。由于 Java语言的安全机制,用户一 旦载入 Applet,就可以放心地来运行其多媒体的用户界面或完成复杂的计算而 不必担心病毒的入侵。虽然 Applet可以和图像、声音、动画等一样从网络上下 载,但它并不同于这些多媒体的文件 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 ,它可以接收用户的输入,与用户进 行动态的交互,而并非只是动画的显示和声音的播放。 本章向大家介绍 Java Applet 的运行原理,和 Applet 作为一种特殊的 Java 类的特性,以及如何编写自己的 Applet类并将其应用到网页中。 教学重点与难点: ◆ Applet的本质 ◆ 在网页上使用 Applet ◆ Applet的生命周期 ◆ 在 Applet上绘画 ◆ Applet的事件处理 11.1 Applet 程序基础 Java Applet 跟一个别的 Java 类并没有本质上的区别,而不同之处在于:Java Applet 是 一个继承了 Applet 类并重写了其中的 init()、paint()、stop()等 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 的的 Java 类,Java Applet 被布署在 Web 服务器(如微软的 IIS)上,当客户端对其所在的 Web 页提出请求时,浏览 器从 Web 服务器上将其下载到本地客户端,然后,浏览器中的 Java 虚拟机创建该 Applet 类的实例并调用其 init()方法,而从安全角度考虑,Applet 没有访问本地文件的权限。由于 Applet 是被浏览器执行的,所以 Applet 不需要一个 main()方法。实际上,除了 Java 应用程 序(Java Application)之外,所有其它 Java 应用都不需要一个 main()方法。 11.1.1 Applet小程序 一个最简单的 Applet 应该至少包括如下的内容: 从 Applet 类继承过来; 重载了 Applet 基类中的 init()、start()、paint()、stop()、destroy()方法; 当然你要写一个仅仅从 Applet 类继承过来的 applet 而不重载其中的方法也是可以编译 通过的,但这样的 applet 毫无意义: //NothingApplet.java import java.applet.*; public class NothingApplet extends Applet { //nothing here } Applet 中几个重载方法的意义如 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 11-1。 表 11-1 Applet方法 方法名 作用 init() 当 applet 第一次被创建时,初次运行初始化 applet 时调用; start() 当 applet 进入 Web 浏览器中,并且允许 applet 启动它的常规操作时 调用(特殊的 applet 被 stop()关闭);该方法在 init()后调用; paint() 这个方法是Applet从继承结构中上溯三级的基础类Component的一 部分。它作为 update()的一部分调用,以便对 applet 的画布(canvas) 进行特殊的描绘; stop() 每次 applet 从 Web 浏览器的视线中离开时调用,使程序片能关闭代 价高昂的操作;应当在调用 destroy()前调用; destroy() 当 applet 不再需要时,destroy()将它从页面中卸载时调用,以执行 资源的最后清除工作。 下面是一个简单的例子: //: TestApplet.java // 显示 init(), start() and stop() activities import java.awt.*; import java.applet.*; public class TestApplet extends Applet { String s; int inits = 0; int starts = 0; int stops = 0; public void init() { inits++; } public void start() { starts++; } public void stop() { stops++; } public void paint(Graphics g) { s = "inits: " + inits + ", starts: " + starts + ", stops: " + stops; g.drawString(s, 10, 10); } } ///:~ 用 javac 编译成.class 文件。由于 applet 没有实现 main()方法,为了查看该 applet 的运 行结果,需要为它编写一个 HTML 文件,并在中间嵌入如下代码: 在上面的 html 标签中,applet code 是你需要用于网页上的 applet 的 class 文件,width 是显示的 applet 的宽度,height 是 applet 的高度。还可以把更多的标签信息写进 applet 的 标签中:例如用于在 Internet 上寻找其他.class 文件的位置(codebase)、对齐和排列信息 (align)、使 applet 相互间能够通信的一个特殊标识符(name)以及用于提供 applet 能接 收的信息的参数。参数采取下述形式: 例如: 可根据需要设置任意多个这样的参数。 图 11-1 Applet 程序 根据上面的说明,我们编写一个名为 testapplet.html 的文件: TestApplet 将此 html 文件保存在 TestApplet.class 的同一目录下。用支持 java 的浏览器(如 IE) 打开可看到效果(图 11.1)。而 JDK 里面也提供了 appletviewer 的工具,用法是: appletviewer url(s) 其中, 包括: -debug 在 Java 调试器中启动 applet 小程序查看器 -encoding 指定由 HTML 文件使用的字符编码 -J 向 Java 解释器传递参数 -J 选项不是 JDK 中的 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 选项。 使用 appletviewer.exe 预览 applet 的效果: 在控制台中输入 appletviewer testapplet.html,也可以看到该 TestApplet.class 的运行情 况。由于 appletviewer 只提取参数文件中关于 applet 的标签的内容,因此我们可以直接把 applet code 的标签直接作为注释置入 Java 源码: // 然后直接运行 appletviewer TestApplet.java,结果跟运行 appletviewer testapplet.html 是 一样的(图 11-2)。 图 11-2 appletviewer 我们回头看 TestApplet.java,发现需要 import java.awt.*,这是由于该 applet 涉及到图 形方面的编程,因此需要使用 awt 包,关于图形界面的编程,将在下一章详细讲述。 11.1.2 Applet程序的生命周期 生命周期是 Java 类的一个重要的概念。它标志着一个 Java 类何时实例化、初始化、 开始运行、停止运行和销毁。在应用程序(Application)中,由于它使用 java 命令运行的 java 应用程序,以一个特定的 main()方法为入口,自行管理其自身的生命周期;而 Applet 并没有特定的 main()方法作为入口(当然你可以实现一个),它是在浏览器中运行的,由浏 览器管理其生命周期。 当浏览器装入 Applet 类,并实例化它的一个对象之后,对其初始化,并调用 start()方 法。 11.2 绘制图形 先来看一个比上例更图形化的 Applet 的例子吧: //: DrawApplet.java // import java.awt.*; import java.applet.*; public class DrawApplet extends Applet { public void paint(Graphics g) { g.drawString("Second applet", 10, 15); g.draw3DRect(0, 0, 100, 20, true); } } 控制台中编译并运行 appletviewer.exe: javac DrawApplet.java appletviewer DrawApplet.java 这个 Applet 用一个方框将字符串包围起来(图 11-3)。当然,所有数字都是“硬编码” 的(指数字写死在程序内部)。因此在一些机器上,框会正好将字串围住;而在另一些机器 上,也许根本看不见这个框,因为不同机器安装的字体也会有所区别。 图 11-3 Applet 程序 11.2.1 paint()方法 上面的例子里,重载了 Applet 类的 paint()方法,事实上,它是从 Component 类经过三 层继承过来的(Component 类ÆContainer 类ÆPanel 类ÆApplet 类)。一旦 Component(目 前是 Applet)决定自己需要更新,就会调用这个方法——可能是由于它再次回到当前屏幕, 或者是因为第一次出现在在屏幕上,或者是其他窗口临时覆盖了 Web 浏览器。此时 Applet 会调用它的 update()方法(在基础类 Component 中定义),该方法会恢复一切该恢复的东西, 而调用 paint()正是 Update()过程的一部分。事实上对 paint()方法的重载不是必须的,但构 建一个简单的 Applet 无疑是方便的方法,要绘制自己的内容应当从 paint()方法开始。 要在某个方法中声明需要重新调用 paint()方法,也可以直接调用重绘方法(repaint())。 当 update()调用 paint()的时候,会向其传递指向 Graphics 对象的一个句柄,那个对象 代表准备在上面描绘(作图)的表面。这是非常重要的,因为我们受到项目组件的外观的 限制,因此不能画到区域外,这可是一件好事,否则我们就会画到线外去。在 Applet 的例 子中,Applet 的外观就是这界定的区域。 11.2.2 使用 Graphics类绘制字符串 paint()方法中只有一个参数:Graphics g。Graphics 是定义在 awt 包内的类,全路径为 java.awt.Graphics,其中包括有设置字体颜色等方法,也有绘制图形文字等等。 先来看看 Graphics 类中的绘制字符串的方法,其中最常用的是 DrawString()。 该方法的原型是: public abstract void drawString(String str, int x, int y); public abstract void drawString(AttributedCharacterIterator iterator, int x, int y); 其中 x 和 y 分别是需要绘制的字符串横坐标和纵坐标,String str 指示需要绘制的字符 串的内容,在重名函数中的 AttributedCharacterIterator iterator 是一种保存字符串信息的游 标类。 其余的绘制字符的方法 drawChars(),绘制字节内容的方法 drawBytes(),实质上也是间 接地调用 drawString()方法。 下面实例说明 drawString 的用法: 11.2.3 Graphics类的其他绘图方法 Graphics 提供了其他的绘图方法: copyArea(int x, int y, int width, int height, int dx, int dy) 将一个矩形区域的图像复制到 另一个区域上; drawLine(int x1, int y1, int x2, int y2) 在指定的两点间画一线段; fillRect(int x, int y, int width, int height) 用预设的颜色填充一个矩形区域; drawRect(int x, int y, int width, int height) 用预设的线条画一个矩形; clearRect(int x, int y, int width, int height) 清空一个矩形的内容; drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) 画圆角的矩 形; fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) 填充圆角的矩 形; draw3DRect(int x, int y, int width, int height) 画一个 3D 的矩形; fill3DRect(int x, int y, int width, int height) 填充 3D 的矩形; drawOval(int x, int y, int width, int height) 在指定的矩形区域内画椭圆; fillOval(int x, int y, int width, int height) 在指定的区域内填充椭圆; drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) 画一段圆弧; fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) 填充一个扇面; drawPolyline(int[] xPoints, int[] yPoints, int nPoints) 画一段折线; drawPolygon(int[] xPoints, int[] yPoints, int nPoints) 画一个多边形; fillPolygon(int[] xPoints, int[] yPoints, int nPoints) 填充一个多边形; drawImage(Image img, int x, int y, ImageObserver observer) 画一幅图像; 下面用一个例子演示这些绘图方法的用法: //~DrawDemo.java // import java.awt.*; import java.applet.*; public class DrawDemo extends Applet { public void paint(Graphics g) { g.setColor(Color.YELLOW); g.drawLine(0, 0, 100, 100); //画线从(0,0)到(100,100) g.setColor(Color.BLUE); g.fillRect(125, 25, 50, 40); //画实心矩形,起点(125,25),大小 50X40 g.setColor(Color.RED); g.drawRect(225, 25, 50, 40); //画空心矩形,起点(225,25),大小 50X40 g.setColor(Color.GREEN); g.drawRoundRect(325, 25, 50, 40, 10, 8); //画圆角矩形,起点(325,25),大小 50X40,圆角 10X8 g.setColor(Color.ORANGE); g.fill3DRect(25, 125, 50, 40, true); //画一个 3D 效果的实心矩形,起点(25,125),大小 50X40 g.setColor(Color.PINK); g.drawOval(125, 125, 50, 40); //画一个空心椭圆,起点(125,125),大小 50X40 g.setColor(Color.MAGENTA); g.fillArc(225, 125, 50, 40, 90, 135); g.setColor(Color.ORANGE); g.fillArc(225, 125, 50, 40, 225, 90); g.setColor(Color.BLACK); g.drawArc(225, 125, 50, 40, 0, 360); //画两个扇形和一个 360 度的圆弧 int[] xP = {325, 375, 325, 375, 325}; int[] yP = {110, 120, 130, 140, 150}; g.drawPolyline(xP, yP, 5); //用 xP 和 yP 作为点数组画折线 } } 这个 Applet 程序的运行结果如图 11-4 所示。 图 11-4 Applet 绘图方法 11.3 Applet 中的事件处理 事件,就是指在系统中有某些我们所关心的事情(例如:鼠标移动了,用户按下了某 个按键等等)发生了,然后系统便 通知 关于发布提成方案的通知关于xx通知关于成立公司筹建组的通知关于红头文件的使用公开通知关于计发全勤奖的通知 我们去处理这些事情。 首先,我们来写一个 Applet,然后在中间加入一个按钮(Button): // ButtonApplet.java // import java.awt.*; import java.applet.*; public class ButtonApplet extends Applet { int x, y; Button bt; public ButtonApplet() { x = y = 100; bt = new Button("按我"); add("Center", bt); } public void paint(Graphics g) { g.drawString("Faint", x, y); } } 编译,运行 appletviewer 后看见 applet 中有一个名为“按我”的按钮。用鼠标点击它, 这称为一次鼠标事件,事件的对象是这个按钮。 为了让事件可以触发 applet 内部的一些状况改变,比如让显示的字符串换个位置,需 要再添加一些代码来关联这一事件,这些代码就是事件处理代码。 在上例中增加一个方法: public boolean action(Event ev, Object arg) { if (ev.target instanceof Button) { if (x >= 200) x = 0; else x += 20; if (y <= 0) y = 200; else y -= 10; repaint(); } return true; } 编译后用 appletviewer 运行: javac ButtonApplet.java appletviewer ButtonApplet.html 这时候按下按钮可发现,字符串的位置也被改变了(图 11-5)。 图 11.5 Applet 事件 11.3.1 键盘事件处理 键盘事件处理就是响应一个键盘事件,并作出处理。程序员需要关心的只是用户按下 了什么键,再处理就行了,而不必像鼠标那样还具有移动的事件要处理。它的主要事件有: KEY_PRESS 事件:在用户按下键时产生; KEY_RELEASE 事件:在用户松开键盘按键的时候产生。 处理它们的方法分别为: public boolean keyDown(Event evt, int key) public boolean keyUp(Event evt, int key) 与 Paint()方法一样,这两个键盘事件处理方法也是从 Component 类中继承过来的。 参数中的 evt 还是表示事件本身的对象,而 key 就是那个被用户按下或放开的案件。 Java 已经在类 Event 中,定义好一些表转的按键值,如表 11-2: 表 11-2 Applet键盘变量 类变量 代表的按键 Event.UP 方向键中的“上”键 Event.DOWN 方向键中的“下”键 Event.LEFT 方向键中的“左”键 Event.RIGHT 方向键中的“右”键 Event.HOME “Home”键 Event.END “End”键 Event.PGUP “Page Up”键 Event.PGDN “Page Down”键 Event.F1 “F1”键 Event.F2 “F2”键 Event.F3 “F3 键 Event.F4 “F4 键 Event.F5 “F5 键 Event.F6 “F6 键 Event.F7 “F7 键 Event.F8 “F8”键 Event.F9 “F9”键 Event.F10 “F10”键 Event.F11 “F11”键 Event.F12 “F12”键 我们在上面的例子中加入对键盘方向键的事件处理来控制字符串的上下左右的移 动: public boolean keyDown(Event e, int key) { switch(Key) { case Event.UP: if (y > 10) y -= 10; break; case Event.DOWN: if (y < 190) y += 10; break; case Event.LEFT: if (x > 10) x -= 10; break; case Event.RIGHT: if (x < 190) x += 10; break; default: ; } repaint(); return true; } 编译后运行 appletviewer,当 applet 小窗口获得焦点时按下上下左右键,可以看到字符 串随之上下左右移动。 11.3.2 鼠标事件处理 由鼠标触发的事件一般有: mouseDown:当鼠标的按键被用户按下时,就会发生 MOUSE_DOWN 事件,这个时 候系统便调用方法 mouseDown 对该事件进行处理。方法 mouseDown 的写法为: public boolean mouseDown(Event e, int x, int y) { …… } 由上面可知,方法 mouseDown 有三个参数:e、x 和 y。e 就是鼠标事件本身,我们把 “事件”看成一个对象实体,只不过它的类是 Event 而已,同时,事件在使用上和一般的 对象实体没有差别。而 x,y 则是这个时间发生时的鼠标的坐标值。要注意的是它的方法返 回值是 boolean 型的值,这点要注意!另外,由于有些机器的鼠标只有一个按键,考虑到 Java 的与平台无关性,因此,这个方法中,就没有我们常见的右键的功能了。它不区分左 右按键。 mouseUp:与前面的相反,这个方法是鼠标放开时的处理函数了,对于使用方法,与 mouseDown 完全相同。 public boolean mouseUp(Event e, int x, int y) { …… } 其中的参数 e、x、y 的意义与 mouseDown 完全一样。 mouseMove:MOUSE_MOVE 和 MOUSE_DRAG 都是由鼠标移动产生的事件,方法 mouseMove 就是用来处理 MOUSE_MOVE 事件的。方法为: public boolean mouseMove(Event evt,int x,int y) { …… } 所用到的参数和方法 mouseDown 和 mouseUp 的完全一样。 mouseDrag:从上面知道,这个方法当然是用来处理 MOUSE_DRAG 事件的。方法为: public boolean mouseDrag(Event e,int x,int y) { …… } 所用到的参数和方法 mouseDown 和 mouseUp 的完全一样。 mouseEnter:这个方法是用来处理 MOUSE_ENTER 事件的,当鼠标进入到 Applet 程 序的窗口范围时,就会发生 MOUSE_ENTER 事件。处理方法为 : public boolean(Event evt, int x,int y) { …… } 所用到的参数和方法 mouseDown 和 mouseUp 的完全一样。 mouseExit:这个方法是用来处理 MOUSE_EXIT 事件的。当鼠标从 Applet 程序窗口移 出来的时候,就会发生 MOUSE_EXIT 事件了。处理方法为: public boolean mouseExit(Event e,int x,int y) { …… } 下面例子用来说明这些鼠标事件处理的使用: //MouseDemo.java // import java.awt.*; import java.applet.*; import java.awt.Event ; public class MouseDemo extends Applet { int x, y; Color c = Color.BLUE; public MouseDemo() { x = 100; y = 100; } public void paint(Graphics g) { g.setColor(c); g.drawString("^..^", x, y); g.drawString("(oo)", x - 2, y + 10); } public boolean mouseDown(Event e, int ex, int ey) { this.x = ex; this.y = ey; this.c = Color.RED; repaint(); return true; } public boolean mouseUp(Event e, int ex, int ey) { this.c = Color.BLUE; repaint(); return true; } public boolean mouseMove(Event e, int ex, int ey) { if ((ex < this.x + 10) && (ex > this.x - 5) && (ey > this.y - 10) && (ey < this.y +10)) this.x = ex; this.y = ey; return true; } public boolean mouseExit(Event e, int ex, int ey) { this.x = 0; this.y = 0; repaint(); return true; } } 在区域内按下鼠标键,猪头的位置会移到按键的地方,同时按下的时候颜色变成红色, 弹起之后颜色变回蓝色。 图 11-6 Applet 鼠标事件 11.4 本章小结 在本章我们学习了 Applet 的基本编程知识,包括如何生成一个 Applet 的实例,并且如 何在网页中使用。 另外介绍了在 Applet 中如何使用绘图类 Graphics 作图,添加事件处理方法生成一个有 交互功能的 Applet。 11.5 上机练习 1. 验证本章的例子。 2. 编写一个具有三个按钮的 Applet,要求单击不同的按钮后,Applet 上显示不同的 文字。 3. 编写一个类似“贪吃蛇”的游戏,以方块表示蛇,用上、下、左、右键来控制蛇 的游动。 4. 编写一个“射击”游戏,随机在界面上某个地方显示一个小圆圈,小圆圈持续的 时间为 1 秒,如果在小圆圈出现的时间内用鼠标点中圆圈内区域,则表示命中目标,并相 应增加游戏分数。 11.6 习题 1. 什么是 Applet?Applet 和 Application 有什么不同? 2. 如何编写一个 Applet?如何让浏览器运行 Applet? 第11章 Java小程序Applet 11.1 Applet程序基础 11.1.1 Applet小程序 11.1.2 Applet程序的生命周期 11.2 绘制图形 11.2.1 paint()方法 11.2.2 使用Graphics类绘制字符串 11.2.3 Graphics类的其他绘图方法 11.3 Applet中的事件处理 11.3.1 键盘事件处理 11.3.2 鼠标事件处理 11.4 本章小结 11.5 上机练习 11.6 习题
本文档为【第11章 Java小程序Applet】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_159176
暂无简介~
格式:pdf
大小:235KB
软件:PDF阅读器
页数:15
分类:互联网
上传时间:2012-11-21
浏览量:23