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

Java 1.1 AWT 視窗與 Applet 雙模式開發:從按鈕到 JAR 封裝完整指南

     編輯:Java 相關知識

核心技巧:Applet 加上 main() 即可雙模式運行

只需在 Applet 類別加入 main(),建立 Frame 載入 Applet 實例,即可同時支援瀏覽器嵌入與獨立應用程式啟動。

完整範例:Button2NewB

//: Button2NewB.java
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class Button2NewB extends Applet {
    Button b1 = new Button("Button 1"), b2 = new Button("Button 2");
    TextField t = new TextField(20);

    public void init() {
        b1.addActionListener(new B1());
        b2.addActionListener(new B2());
        add(b1); add(b2); add(t);
    }

    class B1 implements ActionListener { public void actionPerformed(ActionEvent e) { t.setText("Button 1"); } }
    class B2 implements ActionListener { public void actionPerformed(ActionEvent e) { t.setText("Button 2"); } }

    // 視窗關閉處理:靜態內部類避免外部實例參考
    static class WL extends WindowAdapter {
        public void windowClosing(WindowEvent e) { System.exit(0); }
    }

    public static void main(String[] args) {
        Button2NewB applet = new Button2NewB();
        Frame aFrame = new Frame("Button2NewB");
        aFrame.addWindowListener(new WL());
        aFrame.add(applet, BorderLayout.CENTER);
        aFrame.setSize(300, 200);
        applet.init(); applet.start(); // 手動觸發生命週期
        aFrame.setVisible(true);       // Java 1.1 取代 show()
    }
} ///:~

三大關鍵改進點

1. 視窗監聽器匿名化

// 取代獨立 WL 類別
aFrame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) { System.exit(0); }
});

優點:減少類別名稱汙染;缺點:過度使用可能降低可讀性,視團隊風格決定。

2. BorderLayout 類型安全常數

// 舊寫法:字串易拼錯、編譯不檢查
aFrame.add(applet, "Center");

// 新寫法:編譯期檢查
aFrame.add(applet, BorderLayout.CENTER);

這是 Java Beans 命名規範的先聲,所有標準元件皆支援常數定位。

3. JAR 封裝加速 Applet 載入

// 打包所有 .class (含內部類別)
jar cf Button2NewB.jar *.class

// HTML 引用
<applet code="Button2NewB.class" archive="Button2NewB.jar" width=200 height=150></applet>

優勢:

  • 單一 HTTP 請求下載所有類別
  • 壓縮傳輸,大幅縮短載入時間
  • 免受「單一類別檔案限制」迫使惡劣設計
  • 支援數位簽章驗證來源

生命週期管理補充

手動呼叫 init()/start() 覆蓋瀏覽器自動行為。若需完整模擬,可在 windowClosing 中補充:

public void windowClosing(WindowEvent e) {
    applet.stop();
    applet.destroy();
    System.exit(0);
}

現代化視角

  • Applet 已淘汰,但「單一類別雙模式」思想延伸為 Spring Boot 內嵌容器、JavaFX 應用程式、模組化微服務 的啟動入口設計。
  • setVisible(true) 取代 show()、常數取代魔術字串,體現 API 向型別安全、可發現性演進。

掌握此範本,不僅理解歷史技術,更能體會「啟動入口統一、配置外部化、依賴注入友善」的現代架構精髓。

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