明辉站/网站教程/内容

Java咖啡馆:情人节的Applet(二)

网站教程2024-02-01 阅读
[摘要]说到这里,大家很自然会把Applet跟Macromedia公司的Flash技术进行比较。没错,它们有很多相似之处,比如都是通过插件运行在浏览器中,能带给浏览器更丰富的交互功能(比如在线游戏),甚至可以扩展到了高端手机中。相对而言,Flash的强项在于矢量动画,而且非常轻便,一个插件1MB都不到;而...
说到这里,大家很自然会把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()方法绘制图像,然后再适当的位置把星辰的文字画上去即可。


……

相关阅读