首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Applet 核心技術全解析:從入門到實戰

     編輯:Java 相關知識

前言

Java Applet 憑藉其強大的跨平台能力與豐富的圖形界面支持,曾是早期 Web 應用開發的主流技術之一。雖然現代瀏覽器已不再支持 Applet,但其核心編程思想——事件驅動、圖形繪製、網絡通信等——對理解 Java 圖形用戶界面(GUI)開發、Android 早期開發模式以及當前的 JavaFX 依然具有重要的參考價值。本文將系統梳理 Applet 開發中最基礎、最核心的八大技術點,並附帶完整代碼示例,幫助讀者快速掌握 Java 圖形編程的精髓。

一、文字繪製:drawString() 詳解

文字顯示是所有圖形界面的基礎。在 Applet 中,通過 Graphics 類的 drawString(String str, int x, int y) 方法即可實現。坐標 (x, y) 代表文字基線左下角的位置。

經典 HelloWorld 示例

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

public class HelloWorld extends Applet {
    String text = "Hello World!";

    public void paint(Graphics g) {
        g.drawString(text, 20, 20); // 在 (20,20) 繪製文字
    }
}

關鍵點: Java 內部使用 Unicode(16 位)編碼字符,原生支持中文顯示。若瀏覽器渲染異常,通常是瀏覽器 JDK 版本或字體配置問題,而非代碼錯誤。

二、參數傳遞:getParameter() 與 <param> 標籤

Applet 可通過 HTML 頁面的 <param> 標籤接收外部配置,實現邏輯與數據分離。參數讀取應在 init() 生命週期方法中完成。

動態顯示文本示例

// ShowText.java
import java.awt.*;
import java.applet.*;

public class ShowText extends Applet {
    String text;

    public void init() {
        text = getParameter("word"); // 讀取參數,不區分大小寫
    }

    public void paint(Graphics g) {
        g.drawString(text, 20, 20);
    }
}

HTML 嵌入方式

<applet code="ShowText.class" width="100" height="28">
    <param name="word" value="Hello World!">
</applet>

三、鼠標事件響應:mouseDown / mouseUp

早期 Applet 使用 Event 模型處理鼠標交互,現代 Java 採用 MouseListener 接口,但理解舊模型有助於閱讀歷史代碼。注意:舊模型不區分鼠標左右鍵。

// Mouse.java
import java.awt.*;
import java.applet.*;

public class Mouse extends Applet {
    String text = "";

    public void paint(Graphics g) {
        g.drawString(text, 20, 20);
    }

    public boolean mouseDown(Event evt, int x, int y) {
        text = "Mouse Down";
        repaint(); // 觸發重繪
        return true; // 表示事件已處理
    }

    public boolean mouseUp(Event evt, int x, int y) {
        text = "";
        repaint();
        return true;
    }
}

四、鍵盤事件響應:keyDown / keyUp

同理,鍵盤交互通過重寫 keyDown、keyUp 實現。參數 int key 為鍵碼,可配合 Event 類常量判斷功能鍵。

// Keyboard.java
import java.awt.*;
import java.applet.*;

public class Keyboard extends Applet {
    String text = "";

    public void paint(Graphics g) {
        g.drawString(text, 20, 20);
    }

    public boolean keyDown(Event evt, int key) {
        text = "Key Down: " + key;
        repaint();
        return true;
    }

    public boolean keyUp(Event evt, int key) {
        text = "";
        repaint();
        return true;
    }
}

五、圖像加載與繪製:drawImage() 與 ImageObserver

網絡圖像加載是異步的,必須實現 ImageObserver 接口或使用 MediaTracker 監控加載進度,防止繪製時圖像尚未就緒。

// ShowImg.java
import java.awt.*;
import java.applet.*;
import java.awt.image.*;
import java.net.URL;

public class ShowImg extends Applet implements ImageObserver {
    Image img;

    public void init() {
        String imgName = getParameter("imagename");
        URL baseURL = getDocumentBase(); // HTML 所在基址
        img = getImage(baseURL, imgName); // 異步加載
    }

    public void paint(Graphics g) {
        g.drawImage(img, 0, 0, this); // this 作為 ImageObserver
    }
}

支持格式:GIF、JPG。getDocumentBase() 返回 HTML 頁面 URL,getCodeBase() 返回 Applet class 文件 URL。

六、聲音播放:play() / loop() / stop()

聲音同樣為異步播放,play() 立即返回,後台線程處理音頻流。常用於遊戲音效、背景音樂。

// Sound.java
import java.awt.*;
import java.applet.*;
import java.net.URL;

public class Sound extends Applet {
    String soundName;

    public void init() {
        soundName = getParameter("soundname");
    }

    public boolean mouseDown(Event evt, int x, int y) {
        play(getDocumentBase(), soundName); // 點擊播放
        return true;
    }
}

七、獲取顯示區域尺寸:size() 與 Dimension

Applet 尺寸由 HTML width/height 屬性決定,程序需動態適配。size() 返回 Dimension 對象,包含 width、height 字段。

// GetSize.java
import java.awt.*;
import java.applet.*;

public class GetSize extends Applet {
    Dimension sz;

    public void init() {
        sz = size(); // 獲取顯示區域大小
    }

    public void paint(Graphics g) {
        g.fillOval(0, 0, sz.width, sz.height); // 繪製填滿區域的橢圓
    }
}

八、顏色設置:setBackground / setForeground / setColor

顏色管理分為組件級(背景/前景)與畫筆級(Graphics.setColor)。Color 類提供 13 種預定義常量,也支持 RGB 自定義。

// SetColor.java
import java.awt.*;
import java.applet.*;

public class SetColor extends Applet {
    public void paint(Graphics g) {
        setBackground(Color.blue);   // 組件背景色
        setForeground(Color.green);  // 組件前景色(影響 drawString 等)
        g.fillRect(25, 4, 50, 20);   // 使用前景色填充矩形

        // 畫筆級顏色控制
        g.setColor(Color.red);
        g.drawString("Red Text", 25, 40);
    }
}

總結與最佳實踐

  • 生命週期管理: 初始化在 init(),啟動在 start(),停止在 stop(),銷毀在 destroy(),繪製在 paint()。
  • 異步資源加載: 圖片、音頻均為異步,必須使用 ImageObserver 或 MediaTracker 確保就緒後再繪製/播放。
  • 事件模型升級: 現代開發請使用 java.awt.event 包下的 Listener 接口(MouseListener、KeyListener 等),舊 Event 模型已棄用。
  • 編碼規範: 類名 PascalCase,方法/變量 camelCase,常量 UPPER_SNAKE_CASE。

雖然 Applet 已退出歷史舞台,但其封裝的 AWT 核心機制——圖形上下文、事件分發、異步資源加載——構成了 Java 客戶端開發的基石。掌握這些技巧,對轉型 JavaFX、Swing 甚至 Android 開發都大有裨益。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved