【Java】Applet开发

一、Applet开发环境准备

IDEA在2018版本默认提供了Applet启动配置

 

创建一个Applet应用配置:

 

在IDEA2019版本之后,这个应用配置选项被移除了,改为Java Applet Support插件来提供支持

插件支持在2019版本和之后所有版本(猜测)适用

参考博客:

https://blog.csdn.net/yuanzic1/article/details/121277865

  

二、Applet快速上手

1、创建一个普通Class类文件,然后编写Applet应用代码:

 

package cn.cloud9.applet;

import java.applet.Applet;
import java.awt.*;

/**
 * @projectName: Applet
 * @author: Cloud9
 * @date: 2022年08月30日 09:13
 * @version: 1.0
 */
public class QuickStartApplication extends Applet {

    @Override
    public void paint(Graphics graphics) {
        graphics.drawString ("Hello Java Applet", 25, 50);
    }
}

 

2、打开运行配置编辑框,创建一个Applet应用

执行方式分为两种 

- 指定Applet类执行

- 指定内嵌定位了的Applet类的HTML文件执行

首先选择第一种读取Applet类执行

注意追加AppletViewer启动参数:

-Dfile.encoding=GBK

AppletViewer默认窗口渲染的字体编码跟随操作系统,也就是GBK

最后是指定JRE的HOME目录,一般默认即可

 

如果不追加编码参数,则渲染窗口的选项卡文本乱码

 

上述参数配置完成后保存,然后直接启动即可运行:

 

3、以HTML文件方式执行Applet

在Resource目录下新建HTML文件

- 编写普通HTML文档标记代码

- 在Body标签中编写Applet标签,必须指定code属性和宽度高度属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h3>Java Applet HTML页面测试</h3>
<hr>
<applet code="cn.cloud9.applet.QuickStartApplication.class" width="320" height="120" ></applet>
</body>
</html>

code属性声明目标的资源位置,因为html文件并不和Applet在同一个包下

所以需要声明完整的类路径

可以再追加codebase属性,声明class文件的根目录位置:

<applet code="cn.cloud9.applet.QuickStartApplication.class" codebase="./" width="320" height="120" ></applet>

 

 

配置HTML方式的启动项:

 

运行结果:

好像除了Applet的资源外,HTML代码不渲染解析,和直接加载Applet类文件没有区别

 

三、Applet的生命周期

Applet生命周期对应了这4个方法

- init 初始化Applet实例

- start 实例初始化完成,开始加载

- stop 实例停止执行

- destory 应用关闭,实例停止后销毁

- paint 该方法在start()方法之后立即被调用,或者在applet需要重绘在浏览器的时候调用

package cn.cloud9.applet;

import java.applet.Applet;
import java.awt.*;

/**
 * @projectName: Applet
 * @author: Cloud9
 * @date: 2022年08月30日 09:58
 * @version: 1.0
 */
public class AppletLifeCycle extends Applet {

    @Override
    public void paint(Graphics graphics) {
        graphics.drawString ("Hello Java Applet", 25, 50);
    }

    @Override
    public void init() {
        System.out.println("Applet 初始化... ");
    }

    @Override
    public void start() {
        System.out.println("Applet 初始完毕 开始执行 用户访问Applet页面 ... ");
    }

    @Override
    public void stop() {
        System.out.println("Applet 停止运行 用户从Applet页面跳转... ");
    }

    @Override
    public void destroy() {
        System.out.println("Applet 实例被销毁 用户退出了Applet应用... ");
    }
}

 

配置AppletViewer启动项运行后,可以使用Viewer的调试选项:

 

通过上述的几个选项,可以在控制台输出中查看对应的周期方法触发

 

四、参数获取

创建一个参数获取的Applet类:

getParameter方法可以读取html标签上设置的param标签信息

package cn.cloud9.applet;

import java.applet.Applet;
import java.awt.*;

/**
 * @projectName: Applet
 * @author: Cloud9
 * @date: 2022年08月30日 10:18
 * @version: 1.0
 */
public class AppletParamsGet extends Applet {

    @Override
    public void paint(Graphics graphics) {
        graphics.drawString ("Hello Java 参数读取", 25, 50);
        
        // 获取单个具体参数
        String username = getParameter("username");
        String password = getParameter("password");
        String email = getParameter("email");
        System.out.println("username -> " + username);
        System.out.println("password -> " + password);
        System.out.println("email -> " + email);
    }

    @Override
    public void init() {
        System.out.println("Applet 初始化... ");
    }

    @Override
    public void start() {
        System.out.println("Applet 初始完毕 开始执行 用户访问Applet页面 ... ");
    }

    @Override
    public void stop() {
        System.out.println("Applet 停止运行 用户从Applet页面跳转... ");
    }

    @Override
    public void destroy() {
        System.out.println("Applet 实例被销毁 用户退出了Applet应用... ");
    }
}

  

编写对应的HTML文件:

在applet标签嵌套的内容中编写param标签,分为Name和Value两个属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<applet code="cn.cloud9.applet.AppletParamsGet.class" codebase="./" width="320" height="120" >
    <param name="username" value="张三"/>
    <param name="password" value="qwer1234!@#$"/>
    <param name="email" value="1791255334@qq.com"/>
</applet>

</body>
</html>

  

启动测试结果:

username -> 寮犱笁
password -> qwer1234!@#$
email -> 1791255334@qq.com

  

 

五、事件监听

重写鼠标监听适配器抽象类

package cn.cloud9.applet.listener;

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

/**
 * @projectName: Applet
 * @author: Cloud9
 * @date: 2022年08月30日 10:54
 * @version: 1.0
 */
public class MyMouseListener implements MouseListener {
    /**
     *
     * 鼠标点击事件 左键右键都监听
     * @param e
     * @return void
     * @author Cloud9
     * @createTime 2022/8/30 10:53
     *
     */
    @Override
    public void mouseClicked(MouseEvent e) {
        Point point = e.getPoint();
        int x = point.x;
        int y = point.y;
        System.out.printf("点击事件触发! 坐标 %d, %d \n", x, y);
    }

    /**
     *
     * 鼠标键按下
     * @param e
     * @return void
     * @author Cloud9
     * @createTime 2022/8/30 10:53
     *
     */
    @Override
    public void mousePressed(MouseEvent e) {
        Point point = e.getPoint();
        int x = point.x;
        int y = point.y;
        System.out.printf("鼠标按下事件触发! 坐标 %d, %d \n", x, y);
    }

    /**
     *
     * 鼠标键释放
     * @param e
     * @return void
     * @author Cloud9
     * @createTime 2022/8/30 10:52
     *
     */
    @Override
    public void mouseReleased(MouseEvent e) {
        Point point = e.getPoint();
        int x = point.x;
        int y = point.y;
        System.out.printf("鼠标按键释放事件触发! 坐标 %d, %d \n", x, y);
    }

    /**
     *
     * 鼠标进入
     * @param e
     * @return void
     * @author Cloud9
     * @createTime 2022/8/30 10:52
     *
     */
    @Override
    public void mouseEntered(MouseEvent e) {
        Point point = e.getPoint();
        int x = point.x;
        int y = point.y;
        System.out.printf("鼠标进入窗口事件触发! 坐标 %d, %d \n", x, y);
    }

    /**
     *
     * 鼠标退出
     * @param e
     * @return void
     * @author Cloud9
     * @createTime 2022/8/30 10:52
     *
     */
    @Override
    public void mouseExited(MouseEvent e) {
        Point point = e.getPoint();
        int x = point.x;
        int y = point.y;
        System.out.printf("鼠标退出窗口事件触发! 坐标 %d, %d \n", x, y);
    }

}

 

在Applet应用类初始化时,注册自定义的监听器实现类

package cn.cloud9.applet;

import cn.cloud9.applet.listener.MyMouseListener;

import java.applet.Applet;
import java.awt.*;

/**
 * @projectName: Applet
 * @author: Cloud9
 * @date: 2022年08月30日 10:47
 * @version: 1.0
 */
public class AppletEventListen extends Applet {
    @Override
    public void paint(Graphics graphics) {
        graphics.drawString ("Hello Java Applet", 25, 50);
    }

    @Override
    public void init() {
        System.out.println("Applet 初始化... ");

        // 添加事件监听处理
        this.addMouseListener(new MyMouseListener());
    }

    @Override
    public void start() {
        System.out.println("Applet 初始完毕 开始执行 用户访问Applet页面 ... ");
    }

    @Override
    public void stop() {
        System.out.println("Applet 停止运行 用户从Applet页面跳转... ");
    }

    @Override
    public void destroy() {
        System.out.println("Applet 实例被销毁 用户退出了Applet应用... ");
    }
}

 

监听鼠标点击和在窗口中的事件:  

 

这里只是以鼠标监听事件为例,下面还有这些监听事件类:

 

六、加载图片

resources目录存放一张java.jpg

resources/image/java.jpg

图片Applet类编写:

package cn.cloud9.applet;

import java.applet.Applet;
import java.applet.AppletContext;
import java.awt.*;
import java.net.MalformedURLException;
import java.net.URL;

/**
 * @projectName: Applet
 * @author: Cloud9
 * @date: 2022年08月30日 11:28
 * @version: 1.0
 */
public class AppletShowImage extends Applet {

    private AppletContext appletContext;
    private Image image;

    @Override
    public void paint(Graphics graphics) {
        appletContext.showStatus("Displaying image");
        graphics.drawImage(image, 0, 0, 266, 413, null);
        graphics.drawString("www.javalicense.com", 50, 414);
    }

    @Override
    public void init() {
        appletContext = this.getAppletContext();
        String appletInfo = this.getAppletInfo();
        System.out.println("Applet 初始化... " + appletInfo);

        String imageUrl = this.getParameter("image");
        if (null == imageUrl) imageUrl = "./image/java.jpg";
        URL documentBase = this.getDocumentBase();

        try {
            URL url = new URL(documentBase, imageUrl);
            image = appletContext.getImage(url);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
}

 

HTML文件编写:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<applet code="cn.cloud9.applet.AppletShowImage.class" width="420" height="420" >
    <param name="image" value="./image/java.jpg" />
</applet>
</body>
</html>

  

加载效果,但是发现默认不展示,需要通过拖拽窗口触发重新渲染或者点击启动调试才可以

 

7、加载音频

音频Applet代码:

注意,Applet读取音频文件,只能播放au音频

在线音频转换地址: https://convertio.co/zh/ 

package cn.cloud9.applet;

import java.applet.Applet;
import java.applet.AppletContext;
import java.applet.AudioClip;
import java.net.MalformedURLException;
import java.net.URL;

/**
 * @projectName: Applet
 * @author: Cloud9
 * @date: 2022年08月30日 13:57
 * @version: 1.0
 */
public class AudioApplet extends Applet {
    private AudioClip audioClip;
    private AppletContext appletContext;

    @Override
    public void init() {
        appletContext = this.getAppletContext();
        String audioUrl = this.getParameter("audio");
        if (null == audioUrl) audioUrl = "./audio/tip-sound.au";

        try {
            URL url = new URL(this.getDocumentBase(), audioUrl);
            audioClip = appletContext.getAudioClip(url);
        } catch (MalformedURLException e) {
            e.printStackTrace();
            appletContext.showStatus("Could not load audio file!");
        }
    }

    @Override
    public void start() {
        if (null != audioClip) audioClip.loop();
    }

    @Override
    public void stop() {
        if (null != audioClip) audioClip.stop();
    }
}

  

HTML文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<applet code="cn.cloud9.applet.AudioApplet.class" width="420" height="420" >
    <param name="audio" value="./audio/tip-sound.au" />
</applet>
</body>
</html>

  

 

posted @ 2022-08-30 10:01  emdzz  阅读(642)  评论(0编辑  收藏  举报