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

Java Applet 事件處理機制入門:從 AWT 到互動式介面

     編輯:Java 程式設計入門

前言

Java 的 AWT (Abstract Window Toolkit) 函式庫提供了構建圖形使用者介面 (GUI) 的基礎元件:按鈕、文字欄位、核取方塊等。掌握事件處理模型,是讓 Applet 具備互動性的關鍵。本文透過一個簡單範例,示範如何捕捉按鈕點擊事件並更新畫面。

完整程式碼範例

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

public class AppletEvent extends Applet {
    int x, y;
    Button b;
    Color clr;

    // 建構子:初始化狀態並加入按鈕
    public AppletEvent() {
        y = 40;
        x = 100;
        clr = Color.red;
        b = new Button("你就按著玩兒吧!");
        add("Center", b); // BorderLayout.CENTER
    }

    // 繪圖回呼:繪製歡迎文字
    public void paint(Graphics g) {
        g.setColor(Color.red);
        g.setFont(new Font("Helvetica", Font.PLAIN, 24));
        g.drawString("InofCD歡迎您!", x, y);
    }

    // 事件處理:JDK 1.0/1.1 風舊式事件模型
    public boolean action(Event ev, Object arg) {
        if (ev.target instanceof Button) {
            y += 10;
            x -= 10;
            if (y >= 250) y = 10;
            if (x <= 0) x = 100;
            repaint(); // 觸發重繪
            return true; // 事件已處理
        }
        return false; // 交由父類別處理
    }
}

關鍵概念解析

1. 元件初始化與佈局

建構子中設定初始座標 (x, y),建立按鈕並置於 BorderLayout.CENTER。Applet 本身即為一個 Container,可直接加入子元件。

2. 繪圖機制 paint(Graphics g)

瀏覽器/ AppletViewer 需要重繪時會自動呼叫 paint()。此處根據 x, y 動態繪製字串。注意:不要在 paint() 中執行耗時運算或阻塞呼叫,否則會凍結 UI 執行緒。

3. 事件傳遞與 action() 方法

此範例使用 JDK 1.0/1.1 的舊式事件模型:所有元件的動作事件(按鈕點擊、選單選取等)皆傳遞給 action(Event, Object)。透過 ev.target instanceof Button 判斷事件來源,ev.arg 可取得按鈕標籤文字(此範例未使用)。

現代寫法 (JDK 1.2+):應改用事件監聽器介面 ActionListener,以匿名內部類別或 Lambda 表達式註冊於特定元件,實現關注點分離:

// 現代寫法範例
b.addActionListener(e -> {
    y += 10; x -= 10;
    if (y >= 250) y = 10;
    if (x <= 0) x = 100;
    repaint();
});

4. repaint() 的非同步特性

呼叫 repaint() 只是向系統發出重繪請求,實際的 paint() 執行由 AWT 事件派發執行緒 (EDT) 排程。這保證了繪圖操作的執行緒安全性。

總結

雖然 Applet 已成歷史,但其事件處理模型(舊式 action() 與新式 Listener 模式)奠定了 Java GUI 程式設計的基礎。理解事件來源、事件物件、監聽器註冊、重繪機制,對後續學習 Swing、JavaFX 甚至 Android UI 開發皆大有裨益。

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