Applet 不僅能嵌入網頁,本質上是 java.awt.Panel 子類,繼承自 Container 與 Component,具備完整的事件處理與容器嵌入能力。本文示範兩種在獨立 Java 應用程式中加載 Applet 的完整模式,打破「Applet 僅限瀏覽器」的迷思。
java.applet.Applet
↑ extends
java.awt.Panel
↑ extends
java.awt.Container
↑ extends
java.awt.Component
因此 Applet 就是一個可嵌入任何容器、可處理事件的輕量級元件。
在 main() 完成實例化、初始化、啟動,並嵌入 Frame 顯示。
public class SimpleApplet extends Applet {
public static void main(String[] args) {
Frame f = new Frame("A frame!");
SimpleApplet applet = new SimpleApplet();
applet.init(); // 必須手動調用
applet.start(); // 必須手動調用
f.add("Center", applet);
f.pack();
f.show(); // JDK 1.1+ 建議用 setVisible(true)
}
public void init() { add(new Label("I am a Component")); }
}
關鍵點:瀏覽器自動調用的 init()、start()、stop()、destroy() 生命週期方法,在獨立應用中必須手動管理。
Applet 不必是程式入口,任何類別皆可載入、安裝、啟動多個 Applet 實例。
// SimpleApplet1.java
public class SimpleApplet1 extends Applet {
public void init() { add(new Label("I am a Component")); }
}
// Multi.java
public class Multi extends Frame {
public static void main(String[] args) {
Multi ma = new Multi("frame");
ma.setSize(new Dimension(500, 300));
ma.setLayout(new GridLayout(2, 1));
ma.launchApplet(); // 載入第一個
ma.launchApplet(); // 載入第二個
ma.setVisible(true);
}
public Multi(String s) { super(s); }
void launchApplet() {
Applet theApplet = new SimpleApplet1();
add(theApplet);
theApplet.init();
theApplet.start();
}
}
編譯運行順序:
javac SimpleApplet1.javaSimpleApplet1.class 複製至 Multi.java 目錄javac Multi.javajava Multistop()/destroy() 釋放資源。