Applet 是可在支援 Java 的網頁瀏覽器中執行的 Java 程式,擁有完整 Java API 支援,屬全功能應用程式。但與獨立應用程式有關鍵差異。
java.applet.Applet 類別main() 方法,不會呼叫 main()| 方法 | 呼叫時機 |
|---|---|
init() | Applet 標籤 <param> 處理後,負責初始化 |
start() | init() 後自動呼叫;使用者返回頁面時也會呼叫 |
stop() | 使用者離開頁面時自動呼叫,可重複觸發 |
destroy() | 瀏覽器正常關閉時呼叫,釋放資源 |
paint(Graphics g) | start() 後或需重繪時呼叫,繼承自 java.awt |
import java.applet.*;
import java.awt.*;
public class HelloWorldApplet extends Applet {
public void paint(Graphics g) {
g.drawString("Hello World", 25, 50);
}
}
必須匯入 java.applet.Applet 與 java.awt.Graphics。
繼承 java.applet.Applet 可取得:
getDocumentBase())getCodeBase())showStatus())getImage())、音頻片段(getAudioClip())<html> <title>The Hello, World Applet</title> <hr> <applet code="HelloWorldApplet.class" width="320" height="120"> If your browser was Java-enabled, a "Hello, World" message would appear here. </applet> <hr> </html>
code 指定類別檔,width/height 設定面板大小,必須以 </applet> 關閉。參數透過 <param> 傳遞。
public class CheckerApplet extends Applet {
int squareSize = 50;
public void init() {
String squareSizeParam = getParameter("squareSize");
parseSquareSize(squareSizeParam);
String colorParam = getParameter("color");
Color fg = parseColor(colorParam);
setBackground(Color.black);
setForeground(fg);
}
private void parseSquareSize(String param) {
if (param == null) return;
try { squareSize = Integer.parseInt(param); }
catch (Exception e) { /* 保留預設值 */ }
}
// parseColor()... paint()...
}
<applet code="CheckerApplet.class" width="480" height="320"> <param name="color" value="blue"> <param name="squaresize" value="30"> </applet>
注意:參數名稱不區分大小寫。
JApplet 子類別並設為 publicmain()、框架視窗建構init()setSize()(由 HTML width/height 決定)setDefaultCloseOperation()、setTitle()、setVisible(true)import java.awt.event.*;
import java.applet.Applet;
import java.awt.Graphics;
public class ExampleEventHandling extends Applet implements MouseListener {
StringBuffer strBuffer;
public void init() { addMouseListener(this); strBuffer = new StringBuffer(); addItem("initializing the applet "); }
public void start() { addItem("starting the applet "); }
public void stop() { addItem("stopping the applet "); }
public void destroy() { addItem("unloading the applet"); }
void addItem(String word) { System.out.println(word); strBuffer.append(word); repaint(); }
public void paint(Graphics g) {
g.drawRect(0, 0, getWidth()-1, getHeight()-1);
g.drawString(strBuffer.toString(), 10, 20);
}
public void mouseClicked(MouseEvent e) { addItem("mouse clicked! "); }
// 其他 MouseListener 方法留空...
}
public class ImageDemo extends Applet {
private Image image;
private AppletContext context;
public void init() {
context = this.getAppletContext();
String imageURL = this.getParameter("image");
if (imageURL == null) imageURL = "java.jpg";
try {
URL url = new URL(this.getDocumentBase(), imageURL);
image = context.getImage(url);
} catch (MalformedURLException e) {
context.showStatus("Could not load image!");
}
}
public void paint(Graphics g) {
context.showStatus("Displaying image");
g.drawImage(image, 0, 0, 200, 84, null);
g.drawString("www.javalicense.com", 35, 100);
}
}
public class AudioDemo extends Applet {
private AudioClip clip;
private AppletContext context;
public void init() {
context = this.getAppletContext();
String audioURL = this.getParameter("audio");
if (audioURL == null) audioURL = "default.au";
try {
URL url = new URL(this.getDocumentBase(), audioURL);
clip = context.getAudioClip(url);
} catch (MalformedURLException e) {
context.showStatus("Could not load audio file!");
}
}
public void start() { if (clip != null) clip.loop(); }
public void stop() { if (clip != null) clip.stop(); }
}
AudioClip 三大方法:play()(播放一次)、loop()(循環)、stop()(停止)。