原文位址: http://www.work100.net/training/java-applet.html 更多教程: 光束雲 - 免費課程
Applet
序号 | 文内章節 | 視訊 |
---|---|---|
1 | 概述 | - |
2 | Applet的生命周期 | |
3 | 一個簡單Applet程式 | |
4 | Applet類 | |
5 | Applet的調用 | |
6 | 獲得Applet參數 | |
7 | 指定Applet參數 | |
8 | 應用程式轉換成Applet | |
9 | 事件處理 | |
10 | 顯示圖檔 | |
11 | 播放音頻 |
請參照如上
章節導航
進行閱讀
1.概述
Applet
是一種 Java 程式。它一般運作在支援 Java 的 Web 浏覽器内。因為它有完整的 Java API 支援,是以
Applet
是一個全功能的 Java 應用程式。
如下所示是獨立的 Java 應用程式和
applet
程式之間重要的不同:
- Java 中
類繼承了Applet
類java.applet.Applet
-
類沒有定義Applet
,是以一個main()
程式不會調用Applet
方法main()
-
被設計為嵌入在一個Applet
頁面HTML
- 當使用者浏覽包含
的 HTML 頁面,Applet
的代碼就被下載下傳到使用者的機器上Applet
- 要檢視一個
需要 JVM。 JVM 可以是 Web 浏覽器的一個插件,或一個獨立的運作時環境Applet
- 使用者機器上的 JVM 建立一個
類的執行個體,并調用Applet
生命周期過程中的各種方法Applet
-
有 Web 浏覽器強制執行的嚴格的安全規則,Applet
的安全機制被稱為沙箱安全Applet
-
需要的其他類可以用 Java 歸檔(Applet
)檔案的形式下載下傳下來JAR
2.Applet的生命周期
Applet 類中的四個方法給我們提供了一個架構,你可以在該架構上開發小程式:
- init: 該方法的目的是為你的
提供所需的任何初始化。在Applet
标記内的Applet
标簽被處理後調用該方法。param
- start: 浏覽器調用
方法後,該方法被自動調用。每當使用者從其他頁面傳回到包含init
的頁面時,則調用該方法。Applet
- stop: 當使用者從包含
的頁面移除的時候,該方法自動被調用。是以,可以在相同的Applet
中反複調用該方法。Applet
- destroy: 此方法僅當浏覽器正常關閉時調用。因為
隻有在Applet
網頁上有效,是以你不應該在使用者離開包含HTML
的頁面後遺漏任何資源。Applet
- paint: 該方法在
方法之後立即被調用,或者在start()
需要重繪在浏覽器的時候調用。Applet
方法實際上繼承于paint()
。java.awt
3.一個簡單Applet程式
下面是一個簡單的
Applet
程式
HelloWorldApplet.java
:
import java.applet.*;
import java.awt.*;
public class HelloWorldApplet extends Applet
{
public void paint (Graphics g)
{
g.drawString ("Hello World", 25, 50);
}
}
這些
import
語句将以下類導入到我們的
Applet
類中:
java.applet.Applet.
java.awt.Graphics.
沒有這些
import
語句,Java 編譯器就識别不了
Applet
和
Graphics
類。
4.Applet類
每一個
Applet
都是
java.applet.Applet
類的子類,基礎的
Applet
類提供了供衍生類調用的方法,以此來得到浏覽器上下文的資訊和服務。
這些方法做了如下事情:
- 得到
的參數Applet
- 得到包含
的Applet
檔案的網絡位置HTML
-
類目錄的網絡位置Applet
- 列印浏覽器的狀态資訊
- 擷取一張圖檔
- 擷取一個音頻片段
- 播放一個音頻片段
- 調整此
的大小Applet
除此之外,
Applet
類還提供了一個接口,該接口供
Viewer
或浏覽器來擷取
Applet
的資訊,并且來控制
Applet
的執行。
Viewer
可能是:
- 請求
作者、版本和版權的資訊Applet
-
識别的參數的描述Applet
- 初始化
Applet
- 銷毀
Apple
- 開始執行
Applet
- 結束執行
Applet
Applet
類提供了對這些方法的預設實作,這些方法可以在需要的時候重寫。
"
Hello,World
applet
都是按标準編寫的。唯一被重寫的方法是
paint
方法。
5.Applet的調用
Applet
Applet
<applet>
标簽是在HTML檔案中嵌入
Applet
的基礎。以下是一個調用"
Hello World
applet
的例子;
<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>
注意: 你可以參照 HTML Applet 标簽來更多的了解從 HTML 中調用 applet 的方法。
<applet>
标簽的屬性指定了要運作的
Applet
width
height
用來指定
Applet
運作面闆的初始大小。
Applet
必須使用
</applet>
标簽來關閉。
如果
Applet
接受參數,那麼參數的值需要在
<param>
标簽裡添加,該标簽位于
<applet>
</applet>
之間。浏覽器忽略了
applet
标簽之間的文本和其他标簽。
不支援 Java 的浏覽器不能執行
<applet>
</applet>
。是以,在标簽之間顯示并且和
applet
沒有關系的任何東西,在不支援的 Java 的浏覽器裡是可見的。
Viewer
或者浏覽器在文檔的位置尋找編譯過的 Java 代碼,要指定文檔的路徑,得使用
<applet>
标簽的
codebase
屬性指定。
如下所示:
<applet codebase="http://amrood.com/applets"
code="HelloWorldApplet.class" width="320" height="120">
Applet
所在一個包中而不是預設包,那麼所在的包必須在
code
屬性裡指定,例如:
<applet code="mypackage.subpackage.TestApplet.class"
width="320" height="120">
6.獲得Applet參數
下面的例子示範了如何使用一個
Applet
響應來設定檔案中指定的參數。該
Applet
顯示了一個黑色棋盤圖案和第二種顔色。
第二種顔色和每一列的大小通過文檔中的
Applet
的參數指定。
CheckerApplet
在
init()
方法裡得到它的參數。也可以在
paint()
方法裡得到它的參數。然而,在
Applet
開始得到值并儲存了設定,而不是每一次重新整理的時候都得到值,這樣是很友善,并且高效的。
Applet viewer
或者浏覽器在
Applet
每次運作的時候調用
init()
方法。在加載
Applet
之後,
Viewer
立即調用
init()
方法(
Applet.init()
什麼也沒做),重寫該方法的預設實作,添加一些自定義的初始化代碼。
Applet.getParameter()
方法通過給出參數名稱得到參數值。如果得到的值是數字或者其他非字元資料,那麼必須解析為字元串類型。
下例是
CheckerApplet.java
的修改:
import java.applet.*;
import java.awt.*;
public class CheckerApplet extends Applet
{
int squareSize = 50;// 初始化預設大小
public void init () {}
private void parseSquareSize (String param) {}
private Color parseColor (String param) {}
public void paint (Graphics g) {}
}
下面是
CheckerApplet
類的
init()
方法和私有的
parseSquareSize()
方法:
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) {
// 保留預設值
}
}
該
Applet
調用
parseSquareSize()
,來解析
squareSize
參數。
parseSquareSize()
調用了庫方法
Integer. parseInt()
該方法将一個字元串解析為一個整數,當參數無效的時候,
Integer.parseInt()
抛出異常。
是以,
parseSquareSize()
方法也是捕獲異常的,并不允許
Applet
接受無效的輸入。
Applet
parseColor()
方法将顔色參數解析為一個
Color
值。
parseColor()
方法做了一系列字元串的比較,來比對參數的值和預定義顔色的名字。你需要實作這些方法來使
Applet
工作。
7.指定Applet參數
如下的例子是一個
HTML
檔案,其中嵌入了
CheckerApplet
類。HTML檔案通過使用
<param>
标簽的方法給
applet
指定了兩個參數。
<html>
<title>Checkerboard Applet</title>
<hr>
<applet code="CheckerApplet.class" width="480" height="320">
<param name="color" value="blue">
<param name="squaresize" value="30">
</applet>
<hr>
</html>
注意: 參數名字大小寫不敏感。
8.應用程式轉換成Applet
将圖形化的 Java 應用程式(是指,使用
AWT
的應用程式和使用 Java 程式啟動器啟動的程式)轉換成嵌入在web頁面裡的
applet
是很簡單的。
下面是将應用程式轉換成
Applet
的幾個步驟:
- 編寫一個
頁面,該頁面帶有能加載HTML
代碼的标簽。applet
-
類的子類,将該類設定為JApplet
。否則,public
不能被加載。Applet
- 消除應用程式的
方法。不要為應用程式構造架構視窗,因為你的應用程式要顯示在浏覽器中。main()
- 将應用程式中架構視窗的構造方法裡的初始化代碼移到
Applet
方法中,你不必顯示的構造init()
對象,浏覽器将通過調用Applet
方法來執行個體化一個對象。init()
- 移除對
方法的調用,對于setSize()
來講,大小已經通過Applet
檔案裡的HTML
width
參數設定好了。height
-
方法的調用。setDefaultCloseOperation()
不能被關閉,它随着浏覽器的退出而終止。Applet
- 如果應用程式調用了
方法,消除對該方法的調用。setTitle()
不能有标題欄。(當然你可以給通過applet
html
标簽給網頁自身命名)title
- 不要調用
,setVisible(true)
是自動顯示的。Applet
9.事件處理
Applet
類從
Container
類繼承了許多事件處理方法。
Container
類定義了幾個方法,例如:
processKeyEvent()
processMouseEvent()
,用來處理特别類型的事件,還有一個捕獲所有事件的方法叫做
processEvent
為了響應一個事件,
Applet
必須重寫合适的事件處理方法。
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
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) {
//Draw a Rectangle around the applet's display area.
g.drawRect(0, 0,
getWidth() - 1,
getHeight() - 1);
//display the string inside the rectangle.
g.drawString(strBuffer.toString(), 10, 20);
}
public void mouseEntered(MouseEvent event) {
}
public void mouseExited(MouseEvent event) {
}
public void mousePressed(MouseEvent event) {
}
public void mouseReleased(MouseEvent event) {
}
public void mouseClicked(MouseEvent event) {
addItem("mouse clicked! ");
}
}
如下調用該
Applet
:
<html>
<title>Event Handling</title>
<hr>
<applet code="ExampleEventHandling.class"
width="300" height="300">
</applet>
<hr>
</html>
最開始運作,
Applet
顯示 "
initializing the applet. Starting the applet.
",然後你一點選矩形框,就會顯示 "
mouse clicked
" 。
10.顯示圖檔
Applet
能顯示
GIF
JPEG
BMP
等其他格式的圖檔。為了在
Applet
中顯示圖檔,你需要使用
java.awt.Graphics
drawImage()
如下執行個體示範了顯示圖檔的所有步驟:
import java.applet.*;
import java.awt.*;
import java.net.*;
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)
{
e.printStackTrace();
// Display in browser status bar
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);
}
}
applet
<html>
<title>The ImageDemo applet</title>
<hr>
<applet code="ImageDemo.class" width="300" height="200">
<param name="image" value="java.jpg">
</applet>
<hr>
</html>
11.播放音頻
Applet
能通過使用
java.applet
包中的
AudioClip
接口播放音頻。
AudioClip
接口定義了三個方法:
-
: 從一開始播放音頻片段一次public void play()
-
: 循環播放音頻片段public void loop()
-
: 停止播放音頻片段public void stop()
為了得到
AudioClip
對象,你必須調用
Applet
getAudioClip()
方法。無論
URL
指向的是否是一個真實的音頻檔案,該方法都會立即傳回結果。
直到要播放音頻檔案時,該檔案才會下載下傳下來。
如下執行個體示範了播放音頻的所有步驟:
import java.applet.*;
import java.awt.*;
import java.net.*;
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)
{
e.printStackTrace();
context.showStatus("Could not load audio file!");
}
}
public void start()
{
if(clip != null)
{
clip.loop();
}
}
public void stop()
{
if(clip != null)
{
clip.stop();
}
}
}
如下調用
applet
<html>
<title>The ImageDemo applet</title>
<hr>
<applet code="ImageDemo.class" width="0" height="0">
<param name="audio" value="test.wav">
</applet>
<hr>
你可以使用你電腦上的
test.wav
來測試上面的執行個體。
上一篇:
多線程下一篇:
文檔注釋如果對課程内容感興趣,可以掃碼關注我們的或
公衆号
,及時關注我們的課程更新
QQ群
