天天看點

Java入門 - 進階教程 - 08.AppletApplet

原文位址: http://www.work100.net/training/java-applet.html 更多教程: 光束雲 - 免費課程

Applet

請參照如上

章節導航

進行閱讀

1.概述

Applet

是一種 Java 程式。它一般運作在支援 Java 的 Web 浏覽器内。因為它有完整的 Java API 支援,是以

Applet

是一個全功能的 Java 應用程式。

如下所示是獨立的 Java 應用程式和

applet

程式之間重要的不同:

  • Java 中

    Applet

    類繼承了

    java.applet.Applet

  • Applet

    類沒有定義

    main()

    ,是以一個

    Applet

    程式不會調用

    main()

    方法
  • Applet

    被設計為嵌入在一個

    HTML

    頁面
  • 當使用者浏覽包含

    Applet

    的 HTML 頁面,

    Applet

    的代碼就被下載下傳到使用者的機器上
  • 要檢視一個

    Applet

    需要 JVM。 JVM 可以是 Web 浏覽器的一個插件,或一個獨立的運作時環境
  • 使用者機器上的 JVM 建立一個

    Applet

    類的執行個體,并調用

    Applet

    生命周期過程中的各種方法
  • Applet

    有 Web 浏覽器強制執行的嚴格的安全規則,

    Applet

    的安全機制被稱為沙箱安全
  • Applet

    需要的其他類可以用 Java 歸檔(

    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群

,及時關注我們的課程更新
Java入門 - 進階教程 - 08.AppletApplet
Java入門 - 進階教程 - 08.AppletApplet