Java Applet生命週期
阿新 • • 發佈:2019-02-19
生命週期方法
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);
}
}