正在阅读:Java咖啡馆(10):情人节的AppletJava咖啡馆(10):情人节的Applet

2005-06-01 15:45 出处: 作者:Gary Chan 责任编辑:moningfeng
说到这里,大家很自然会把Applet跟Macromedia公司的Flash技术进行比较。没错,它们有很多相似之处,比如都是通过插件运行在浏览器中,能带给浏览器更丰富的交互功能(比如在线游戏),甚至可以扩展到了高端手机中。相对而言,Flash的强项在于矢量动画,而且非常轻便,一个插件1MB都不到;而Applet是一个全功能技术,与J2EE技术结合起来将给你更大的想象空间,这是Flash技术不能比拟的。 编写一个Applet只需要四个步骤:   1.Import相应的类和包   2.从Applet类继承一个子类   3.实现某些Applet的方法   4.嵌入网页运行   如果你有些无法理解上面的术语,赶快翻开去年的Java咖啡馆连载温故而知新吧! 设计Applet   或许有的朋友接触过类似游戏,但那些网页基本都是通过动态网页技术,比如PHP、ASP、JSP等在服务器端绘制图片然后显示出来的。杀鸡焉用牛刀,通过最简单的Applet,然后再玩一些小技巧同样能达到完美效果,并且不需要特殊的服务器来执行动态网页,普通的静态个人主页空间里也能够实现这个效果。   首先让我们完成这个Applet程序设计,也就是完成Applet编写步骤的前三步。说穿了,这个Applet的工作只是读取背景图片然后绘制“老鼠爱大米”字样。关键问题在于,“老鼠”和“大米”应该可以通过参数控制,比如替换成“帅哥”、“美女”等,这样就可以当做一种服务提供给朋友,让他们通过设定网页参数达到不同的星辰效果,而不是让他们手动修改源代码。实际上,Applet可以通过getParameter()方法从HTML中获取参数。   还是让我们通过源代码来了解Applet吧。打开Eclipse,新建一个NewsApplet类,输入如下代码:

import java.applet.Applet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.MediaTracker; public class NewsApplet extends Applet { Image snapshot; String from, to; public void init() { from = null == getParameter("from") ? "老鼠" : getParameter("from"); to = null == getParameter("to") ? "大米" : getParameter("to"); snapshot = getImage(getCodeBase(), "snapshot.jpg"); MediaTracker tracker = new MediaTracker(this); tracker.addImage(snapshot, 0); try { tracker.waitForID(0); } catch (Exception e) { System.out.println("无法下载snapshot.jpg!"); } } public void paint(Graphics g) { g.drawImage(snapshot, 0, 0, snapshot.getWidth(this), snapshot.getHeight(this), this); g.setFont(new Font("华文彩云", Font.BOLD + Font.ITALIC, 14)); g.setColor(Color.white); g.drawString(from, 30, 90); g.drawString("爱", 50, 105); g.drawString(to, 70, 120); } }

下面解释一下代码:   首先,所有Applet程序都是从Applet类继承而来的,所以用extends Applet表示这种继承关系,这样NewsApplet类便拥有了Applet类的所有能力。   接着是三个成员变量,snapshot用来读取snapshot.jpg图片,也就是图中显示的海洋和椰子树的图片,这个图片应该放在Eclipse项目的根目录中,即与最终的class文件处于同一个目录中;from和to用来记录你和她的名字。   然后是两个方法,init()和paint()。每个applet可以实现许多方法,有的表明生命周期,有的负责绘图和事件的触发。比如NewsApplet类中的init()方法将会在Applet每次装载的时候被调用,而paint()方法将会在每次重绘时候被调用。   init()函数非常适合进行资源初始化,比如程序中首先通过getParameter()函数获取网页中提供的参数,然后用getImage()读取图像资源并且用MediaTracker的waitForID()方法确保图片完成下载。   paint()非常重要,它完成了所有的绘图过程。在代码中,首先通过drawImage()方法绘制图像,然后再适当的位置把星辰的文字画上去即可。
键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品