Đ tài 9. Appletề
Applet là m t trong nh ng k thu t v t tr i c a Java so v i các ngôn ng khác. M tộ ữ ỹ ậ ượ ộ ủ ớ ữ ộ
Applet là m t ch ng trình Java đ c nhúng vào trong các trang web, nó đ ng m t v trí đ cộ ươ ượ ứ ộ ị ộ
l p bên c nh các ph n khác c a trang web.ậ ạ ầ ủ
I. Xây d ng m t Applet đ n gi nự ộ ơ ả
1. So n th o m t t p có tên “Hello.java” nh sau:ạ ả ộ ệ ư
import java.applet.Applet; //khai báo th vi nư ệ
import java.awt.Graphics;
//Khai báo đ hoồ ạ
public class Hello extends Applet {
//cài đ t ph ng th c cho Appletặ ươ ứ
public void paint(Graphics g){
g.drawString("Hello!", 50, 25);
}
2. Biên d ch t p Hello.javaị ệ
3. So n th o m t trang HTML có tên hello.htmạ ả ộ
<html><body>
<applet>
<applet code="Hello.class" width=150 height=25>
</applet>
</body></html>
4. Đ t file Hello.class và hello.htm vào trong cùng m t th m cặ ộ ư ụ
5. M file hello.htm.ở
Tuy nhiên đ các applet có th ch y đ c, nó c n m t JVM trên máy c c b . Đ cóể ể ạ ượ ầ ộ ụ ộ ể
đ c JVM cho các trình duy t ta c n cài phiên b n Java lên máy tính c c b và tích h p vàoượ ệ ầ ả ụ ộ ợ
trình duy t nh m t plug-in.ệ ư ộ
Trong các phiên b n Java g n đây, ng i l p trình có th s d ng th vi n swing n mả ầ ườ ậ ể ử ụ ư ệ ằ
trong gói javax.swing đ có đ c giao di n GUI th ng nh t trên m i h th ng. Các l p trongể ượ ệ ố ấ ọ ệ ố ớ
swing có tên g i khác so v i các l p trong awt b i thêm ký t đ u tiên “J”.ọ ớ ớ ở ự ầ
II. C u trúc c b n và vòng đ i c a m t Appletấ ơ ả ờ ủ ộ
M t ch ng trình Applet đ y đ s bao g m các thành ph n nh sau:ộ ươ ầ ủ ẽ ồ ầ ư
import java.applet.Applet;
public class myApplet extends Applet{
public void init(){ ...... }
public void start(){ ...... }
public void stop() { ...... }
public void destroy() { ...... }
.... //Các ph ng th c khácươ ứ
}
N u dùng JApplet thì ta có khai báo ph n đ u nh sau:ế ầ ầ ư
import javax.swing.JApplet;
public class myApplet extends JApplet{…}
108
Vòng đ i c a m t Applet đ c đánh d u b i các s ki n di n ra m i giai đo n, l pờ ủ ộ ượ ấ ở ự ệ ễ ở ỗ ạ ậ
trình viên c n n m đ c ý nghĩa c a t ng giai đo n đ có th vi t code đi u khi n Applet:ầ ắ ượ ủ ừ ạ ể ể ế ề ể
1. Giai đo n init: Th c hi n các công vi c kh i t o m t Applet. Giai đo n nàyạ ự ệ ệ ở ạ ộ ạ
đ c b t đ u ngay sau khi th <param> n m trong th <applet> đ c x lý.ượ ắ ầ ẻ ằ ẻ ượ ử
Các hành đ ng nh thêm các thành ph n giao di n ng i dùng GUI đ c th cộ ư ầ ệ ườ ượ ự
hi n đây.ệ ở
2. Giai đo n start: Đ c th c hi n ngay sau khi giai đo n init đ c th c hi nạ ượ ự ệ ạ ượ ự ệ
xong. Nó cũng đ c g i b t c khi nào ng i dùng chuy n sang m t trang webượ ọ ấ ứ ườ ể ộ
khác r i quay l i trang có applet. Do đó, code n m trong start có th đ c th cồ ạ ằ ể ượ ự
hi n nhi u l n trong khi code trong init ch đ c th c hi n 1 l n.ệ ề ầ ỉ ượ ự ệ ầ
3. Giai đo n stop: Đ c th c hi n khi ng i dùng r i kh i trang web ch a applet.ạ ượ ự ệ ườ ờ ỏ ứ
Do đó, code n m trong stop cũng có th đ c th c hi n nhi u l n.ằ ể ượ ự ệ ề ầ
4. Giai đo n destroy: Đ c th c hi n khi ng i s d ng t t trình duy t.ạ ượ ự ệ ườ ử ụ ắ ệ
Khi vi t m t applet, chúng ta không ph i khi nào cũng cài đ t đ y đ 4 ph ng th cế ộ ả ặ ầ ủ ươ ứ
mà tùy theo nhu c u.ầ
Ví d sau xây d ng m t applet cho phép v liên ti p b t đ u t v trí gi a applet.ụ ự ộ ẽ ế ắ ầ ừ ị ữ
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class AppletSample extends Applet
{
Point curentPoint; // L u t a đ đi m hi n t iư ọ ộ ể ệ ạ
public void init()
{
curentPoint = new Point(this.getWidth()/2,this.getHeight()/2);
this.setBackground(Color.CYAN); // đ t màu n n c a appletặ ề ủ
}
public void start()
{
this.addMouseListener( new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
drawOnApplet(curentPoint,e.getPoint());
curentPoint = e.getPoint();
}
}
);
}
public void drawOnApplet(Point p1, Point p2)
{
Graphics g = this.getGraphics();
g.drawLine(p1.x,p1.y,p2.x,p2.y);
}
}
109
III. An ninh và kh năng c a Appletả ủ
Vì applet đ c download t xa và th c hi n trên máy tính c b nên v n đ v an ninhượ ừ ự ệ ụ ộ ấ ề ề
đ c quan tâm đ c bi t. Các nguyên t c v an ninh c a m t applet là:ượ ặ ệ ắ ề ủ ộ
• Applet không bao gi th c hi n m t ch ng trình c a máy c c b .ờ ự ệ ộ ươ ủ ụ ộ
• Applet không th giao ti p v i các máy tính khác trên m ng tr máy tính mà nóể ế ớ ạ ừ
đ c download v .ượ ề
• Applet không th đ c và ghi d li u lên máy tính c c bể ọ ữ ệ ụ ộ
• Applet không th tìm th y thông tin gì v máy tính cuc b , tr các thông tin nhể ấ ề ộ ừ ư
phiên b n Java, tên và phiên b n h đi u hành, ký t phân tách file, đ ng d n.ả ả ệ ề ự ườ ẫ
Applet không th tìm th y các thông tin cá nhân nh email, password,…ể ấ ư
• T t c các c a s trình duy t có applet đ c t i v đ u có thông báo. ấ ả ử ổ ệ ượ ả ề ề
Nh ng yêu c u v an ninh c a applet là r t quan tr ng. Trong m t s tr ng h p ta cóữ ầ ề ủ ấ ọ ộ ố ườ ợ
th c u hình đ applet đ c tin c y và có th truy c p vào máy tính c c b gi ng nh m tể ấ ể ượ ậ ể ậ ụ ộ ố ư ộ
ch ng trình đang ch y trên máy tính đó.ươ ạ
• Applet cũng có nh ng kh năng nh :ữ ả ư
• T o k t n i đ n máy đang ch y nó.ạ ế ố ế ạ
• Applet d dàng dùng các siêu văn b n hi n th .ễ ả ể ị
• Có th g i đ n các ph ng th c toàn c c c a các applet khác trên cùng trangể ọ ế ươ ứ ụ ủ
web. Applet có th giao ti p v i các applet khác trên trang web cũng nh v i cácẻ ế ớ ư ớ
đ i t ng khác trên trang web thông qua c ch riêng.ố ượ ơ ế
• Các applet đ c n p t h th ng t p tin c c b s không b các gi i h n c aượ ạ ừ ệ ố ậ ụ ộ ẽ ị ớ ạ ủ
các applet đ c n p t m ng xu ng.ượ ạ ừ ạ ố
• Không nh t thi t là các applet s ng ng l i khi ta thoát kh i các trang web ch aấ ế ẽ ừ ạ ỏ ứ
nó.
IV. ng d ng Applet v i c a s PopupỨ ụ ớ ủ ổ
V i Applet chúng ta hoàn toàn có th có thêm các c a s pop-up đ m r ng khôngớ ể ử ổ ể ở ộ
gian làm vi c. Sau đây là m t Japplet có th m m t Frame m i.ệ ộ ể ở ộ ớ
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PopupCalculatorApplet extends JApplet
{
public void init()
{
// T o m t frame v i m t c a s panelạ ộ ớ ộ ử ổ
final JFrame frame = new JFrame();
frame.setTitle("Calculator");
frame.setSize(200, 200);
// Thêm m t Button đ n/ hi n frame pop-upộ ể ẩ ệ
JButton calcButton = new JButton("Calculator");
add(calcButton);
calcButton.addActionListener(new
ActionListener()
{
110
public void actionPerformed(ActionEvent event)
{
frame.setVisible(!frame.isVisible());
}
});
}
}
V. Các th HTML c a Appletẻ ủ
M t khai báo applet trong trang HTML th ng có d ng:ộ ườ ạ
<applet code="NotHelloWorldApplet.class" width="300" height="100">
Thong tin duoc hien thi khi applet khong hien thi
</applet>
Sau đây ta s tìm hi u các thu c tính c a applet:ẽ ể ộ ủ
Các thu c tính v v trí:ộ ề ị
• height: Chi u cao c a applet. Các applet không th thay đ i kích th c khi đãề ủ ể ổ ướ
ch y.ạ
• width: Chi u r ng c a appletề ộ ủ
• align: Xác đ nh v trí c a applet so v i các văn b n xung quanh nó. Các giá trị ị ủ ớ ả ị
c a align có th là: left, right, middle, top, texttop, absmiddle, baseline, bottom,ủ ể
absbottom, vspace và hspace.
Các thu c tính v ch ng trình ngu n- code:ộ ề ươ ồ
code : Thu c tính này cho bi t tên c a class ch a ch ng tình applet. Tên này là t ngộ ế ủ ứ ươ ươ
đ i so v i giá tr codebase ho c v i th m c hi n hành n u không có codebase. Đ ng d nố ớ ị ặ ớ ư ụ ệ ế ườ ẫ
ph i phù h p v i đ ng d n gói c a class applet. Ví d : n u applet có tên MyApplet.classả ợ ớ ườ ẫ ủ ụ ế
đ c đ t trong gói com.mycompany thì đ ng d n ph i là:ượ ặ ườ ẫ ả
code="com/mycompany/MyApplet.class".
ho c:ặ
code="com.mycompany.MyApplet.class" cũng đ c ch p nh n.ượ ấ ậ
- codebase: Là m t thu c tính tùy ch n đ xác đ nh đ ng d n tuy t đ i n i ch a classộ ộ ọ ể ị ườ ẫ ệ ố ơ ứ
giá tr code.ở ị
archive: Ch a tên các gói ch ng trình ho c tài nguyên khác đ c t i v kèm theoứ ươ ặ ượ ả ề
applet. Các gói ch ng trình đ c nén d ng file JAR và đ c đ t cách nhau b i d u ,. Víươ ượ ở ạ ượ ặ ở ấ
d :ụ
<applet code="CalculatorApplet.class"
archive="CalculatorClasses.jar,corejava/CoreJavaClasses.jar"
width="100" height="150">
object: Ch a tên file đã đ c tu n t hóa c a m t applet.ứ ượ ầ ự ủ ộ
name: Tên c a applet. Trong các trình duy t c a Netscape ho t Windows đ u cho phépủ ệ ủ ặ ề
applet giao ti p v i các đ i t ng javascript khác trên trang web. Khi đó applet c n có tên đế ớ ố ượ ầ ể
truy c p.ậ
Ngoài ra Java cho phép ta đ nh nghĩa các tham s cho applet thông qua các th <param>ị ố ẻ
Ví d :ụ
<applet code="FontParamApplet.class" width="200" height="200">
<param name="font" value="Helvetica"/>
111
<param name="size" value="24"/>
</applet>
Khi đó trong ch ng trinh applet, ta có th l y ra đ s d ng:ươ ể ấ ể ử ụ
public class FontParamApplet extends JApplet
{
public void init()
{
String fontName = getParameter("font");
int fontSize = Integer.parseInt(getParameter("size"));
. . .
}
}
VI. Các ph ng th c, l p trình đ h a và b t s ki n c a appletươ ứ ậ ồ ọ ắ ự ệ ủ
• public void paint(Graphics g) {...}: Là ph ng th c hi n th c b n, th ng cácươ ứ ể ị ơ ả ườ
applet dùng paint() đ bi u di n các ho t đ ng c a mình trên trang web.ể ể ễ ạ ộ ủ
• public void update(Graphics g) {...}: là ph ng th c ta dùng sau khi th c hi nươ ứ ự ệ
pain() nh m làm tăng hi u qu v .ằ ệ ả ẽ
Ngoài ra Applet còn th a h ng các ph ng th c t l p AWT.ừ ưở ươ ứ ừ ớ
• Ph ng th c repaint() đ c dùng khi c a s c n c p nh t l i. Ph ng th c nàyươ ứ ượ ử ổ ầ ậ ậ ạ ươ ứ
ch c n m t tham s là đ i t ng c a l p Graphics. ỉ ầ ộ ố ố ượ ủ ớ
• getDocumentBase(): cho bi t đ a ch d ng URL c a th m c ch a t p tinế ị ỉ ạ ủ ư ụ ứ ậ
HTML ch a applet.ứ
• getCodeBase(): Cho bi t đ a ch d ng URL c a th m c ch a t p tin .CLASSế ị ỉ ạ ủ ư ụ ứ ậ
c a applet.ủ
• getImage(URL url, String name): tr v m t đ i t ng nh hi n th trên n n.ả ề ộ ố ượ ả ể ị ề
• getLocale(): Xác đ nh v trí applet.ị ị
• getAudioClip(URL url, String name): cho đ i tu ng audio.ố ợ
• showStatus(String st): hi n th xâu st trên thanh trang thái.ể ị
• drawChars(char array[ ], int offset, int length, int xCoor, int yCoor): xu t các kýấ
t . Chú thích các tham s : array: M ng các ký t ; offset: V trí b t đ u, n i cácự ố ả ự ị ắ ầ ơ
ký t đ c v .; length: S các ký t c n đ c v ; xCoor: To đ X, n i các kýự ượ ẽ ố ự ầ ượ ẽ ạ ộ ơ
t c n đ c v ; yCoor: To đ Y, n i các ký t c n đ c v . ự ầ ượ ẽ ạ ộ ơ ự ầ ượ ẽ
• drawBytes(byte array[ ], int offset, int length, int xCoor, int yCoor): xu t các byteấ
ra.Trong đó array: M ng các byte.;V trí offset hay v trí b t đ u; length: S byteả ị ị ắ ầ ố
c n v ; xCoor: To đ X; yCoor: To đ Y. ầ ẽ ạ ộ ạ ộ
• drawLine(int x1, int y1, int x2, int y2): V đ ng th ng t A(x1, y1) đ n B(x2,ẽ ườ ẳ ừ ế
y2).
• drawOval(int xCoor, int yCoor, int width, int height): V đ ng oval.ẽ ườ
• fillOval(int xCoor, int yCoor, int width, int height): V hình oval đ c.Trong đó:ẽ ặ
width là Chi u r ng c a hình, height là Chi u cao c a hình.ề ộ ủ ề ủ
• drawRect(int xCoor, int yCoor, int width, int height): V hình ch nh t.ẽ ữ ậ
• fillRect(int xCoor, int yCoor, int width, int height): V hình ch nh t đ c.ẽ ữ ậ ặ
• drawRoundRect(int xCoor, int yCoor, int width, int height, int arcwidth, int
archeight): V hình ch nh t có bo góc.ẽ ữ ậ
112