1. 程式人生 > >Java Applet生命週期

Java Applet生命週期

生命週期方法

init方法

建立applet之後就會呼叫init方法,如果Applet的子類有一個初始化過程要完成,那麼該子類就應該覆蓋init方法。通常這個功能包括從html網頁的<applet>標記中獲取字串引數值

start方法

在init方法之後就會呼叫start方法。當用戶瀏覽過其他網頁之後返回到包含這個applet的Web頁面時,該方法也會被呼叫。

每當訪問包含applet的web網頁時,如果還有任何需要完成的操作,Applet的子類就會覆蓋這個方法,例如,一個帶動畫的applet可以啟動一個 定時器來重新開始動畫

stop方法

stop方法恰好與start方法相反,start方法是使用者返回包含applet的網頁時呼叫的,而stop方法是使用者在離開這個網頁時呼叫的。

每當包含applet的Web頁面不再可見時,如果還有其他需要執行的操作,Applet的子類就會覆蓋這個方法。例如,一個帶動畫的applet可能會停止定時器來暫停動畫。

destory方法

當瀏覽器正常退出時,就會呼叫destory方法,以通知applet不再需要它並且應該釋放它所佔有的資源。stop方法總是在destory方法之前呼叫。

如果Applet子類在銷燬之前還有要完成的操作,這個Applet的子類就會覆蓋destory方法。通常情況下是不需要覆蓋這個方法的,除非希望釋放建立applet所佔有的特定資源。

給Applet傳遞字串

DisplayMessage.html

<html>
    <head>
        <title>Passing Strings to Java Applets</title>
    </head>
    <body>
        <p>get a message from the html page and display it</p>
        <applet
            code = "DisplayMessage.class"
            width = 200
            height
= 50 alt = "you must have a Java 2-enabled browser to view the applet">
<parm name = MESSAGE value = "welcome to Java"/> <parm name = X value = 20/> <parm name = Y value = 30/> </applet> </body> </html>

DisplayMessage.java

import javax.swing.*;

public class DisplayMessage extends JApplet{
    public void init(){
        //從html頁面獲取引數
        String message = getParameter("MESSAGE");
        int x = Integer.parseInt(getParameter("X"));
        int y = Integer.parseInt(getParameter("Y"));

        MessagePanel messagePanel = new MessagePanel(message);
        messagePanel.setXCoordinate(x);
        messagePanel.setYCoordinate(y);

        add(messagePanel);
    }
}

注:Applet類的getParameter方法只能在建立一個applet的例項之後呼叫。因此,這個方法不能在applet類的構造方法中呼叫。應該從init方法中呼叫它。

MessagePanel .java

import java.awt.*;
import javax.swing.*;

public class MessagePanel extends JPanel{
    private String message = "Hello World";
    private int xCoordinate = 20;
    private int yCoordinate = 20;
    private boolean centered;
    private int interval = 10;

    public MessagePanel(){}

    public MessagePanel(String message){
    this.message = message;
    }

    public String getMessage(){
    return message;
    }

    public void setMessage(String message){
        this.message = message;
        repaint();
    }
    public int getXCoordinate(){
        return xCoordinate;
    }

    public void setXCoordinate(int xCoordinate){
        this.xCoordinate = xCoordinate;
        repaint();
    }

    public int getYCoordinate(){
        return yCoordinate;
    }

    public void setYCoordinate(int yCoordinate){
        this.yCoordinate = yCoordinate;
        repaint();
    }

    public boolean isCentered(){
        return centered;
    }

    public void setCentered(boolean centered){
        this.centered = centered;
        repaint();
    }

    public int getInterval(){
    return interval;
    }

    public void setInterval(int interval){
        this.interval = interval;
        repaint();
    }

    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        if(centered == true){
            FontMetrics fm = g.getFontMetrics();
            int stringWidth = fm.stringWidth(message);
            int stringAscent = fm.getAscent();
            xCoordinate = getWidth() / 2 - stringWidth / 2;
            yCoordinate = getHeight() / 2 + stringAscent / 2;
        }
        g.drawString(message , xCoordinate , yCoordinate);
    }

    public void moveLeft(){
        xCoordinate -= interval;
        repaint();
    }

    public void moveRight(){
        xCoordinate += interval;
        repaint();
    }

    public void moveUp(){
        yCoordinate -= interval;
        repaint();
    }

    public void moveDown(){
        yCoordinate += interval;
        repaint();
    }

    public Dimension getPreferredSize(){
        return new Dimension(200 , 30);
    }
}