L P TRÌNH GIAO DIN TRÊN JAVA
6.4 HTML & APPLET
Applet là m t ch ng trình Java có th ch y trong các trình duy t web có h tr Java. T t c các applet đ u là các l p con c a l p Applet. t o applet, ta c n import hai gói sau:
import java.applet.*; import java.awt.*;
6.4.1 C u trúc c a m t Applet
C u trúc t ng quát c a m t applet nh sau:
public class <Tên l p applet> extends Applet{ … // Các thu c tính
public void init(){…} public void start(){…} public void stop(){…} public void destroy(){…} … // Các ph ng th c khác }
Các ph ng th c c b n c a m t applet:
• init(): Kh i t o các tham s , n u có, c a applet. • start(): Applet b t đ u ho t đ ng.
• stop(): Ch m d t ho t đ ng c a applet.
• destroy(): Th c hi n các thao tác d n d p tr c khi thoát kh i applet.
L u ý:
• Khơng ph i t t c các applet đ u ph i cài đ t đ y đ 4 ph ng th c c b n trên. Applet cịn có th cài đ t m t s ph ng th c tu ch n (không b t bu c) sau:
• paint(Graphics): Ph ng th c v các đ i t ng giao di n bên trong applet. Các thao tác v này đ c th c hi n b i đ i t ng đ ho Graphics (là tham s đ u vào).
• repaint(): Dùng đ v l i các đ i t ng trong applet. Ph ng th c này s t
• update(Graphics): Ph ng th c này đ c g i sau khi th c hi n ph ng th c paint nh m t ng hi u qu v . Ph ng này s t đ ng g i ph ng th c paint(). Ch ng trình 6.17 cài đ t m t applet đ n gi n, m i ph ng th c s in ra thông báo r ng applet
đang trong th i đi m t ng ng.
Ch ng trình 6.17
package vidu.chuong6; import java.awt.*; import java.applet.*;
public class SimpleApplet extends Applet{
private StringBuffer buffer; // Chu i thông báo
public void init(){ // Kh i t o buffer = new StringBuffer();
addBuffer(“initializing…”); }
public void start(){ // Kích ho t addBuffer(“starting…”);
}
public void stop(){ // D ng addBuffer(“stopping…”);
}
public void destroy(){ // Thoát addBuffer(“unloading…”);
}
private void addBuffer(String newBuffer){
buffer.append(newBuffer); // Thêm thông báo repaint();
}
public void paint(Graphics g){
g.drawString(buffer.toString(), 5, 15); // Hi n thông báo }
}
6.4.2 S d ng applet
Applet không th ch y nh m t ng d ng Java đ c l p (nó khơng có hàm main), mà nó ch ch y
đ c khi đ c nhúng trong m t trang HTML (đuôi .htm, .html) và ch y b ng m t trình duy t web thông th ng.
Các b c xây d ng và s d ng m t applet bao g m:
• Biên d ch mã ngu n thành l p .class • Nhúng mã .class c a applet vào trang html.
nhúng m t applet vào m t trang html, ta dùng th (tag) <Applet> nh sau:
<APPLET CODE = “Tên_file_applet.class” WIDTH = “Chi u_r ng”
HEIGHT = “Chi u_cao”> </APPLET>
Trong đó:
• Tên applet là tên file mã ngu n đã biên d ch thành file ch y có đi .class c a Java. • Chi u r ng và chi u cao là kích th c c a vùng trên trang html mà applet s đ c đ t vào. Ví d , trong trang myHtml.htm có ch a n i dung nh sau:
<HTML> <HEAD>
<TITLE> A simple applet </TITLE> </HEAD>
<BODY>
This is the output of applet:
<APPLET CODE = “SimpleApplet.class” WIDTH=200 HEIGHT=20> </APPLET>
</BODY> </HTML>
s nhúng applet đã đ c đnh ngh a trong ch ng trình 6.17 vào m t vùng có kích th c 200*20 trong trang myHtml. Bây gi , ta có th ki m nghi m ch ng trình applet c a mình b ng cách m trang myHtml trên các trình duy t thơng th ng.
Ch ng trình 6.18 cài đ t m t applet có ch c n ng t ng t nh ch ng trình 6.7, th c hi n các thao tác tính tốn c b n trên hai s . Ngo i tr vi c đây là m t applet, nên có th ch y trên m t trang html. Ch ng trình 6.18 package vidu.chuong6; import java.awt.*; import java.awt.event.*; import java.applet.*;
public class AppletDemo extends Applet implements ActionListener{ Label lbl1, lbl2, lblKq;
TextField txt1, txt2;
Button btnCong, btnTru, btnNhan, btnChia, btnThoat;
public void init(){
this.setLayout(new GridLayout(6,2)); //Ch đ hi n th 6 dòng, 2 c t lbl1 = new Label(“So thu nhat:”); // Nhãn s th nh t
txt1 = new TextField(); // Ô v n b n s th nh t this.add(txt1);
lbl2 = new Label(“So thu hai:”); // Nhãn s th hai this.add(lbl2);
txt2 = new TextField(); // Ô v n b n s th hai this.add(txt2);
lblKq = new Label(); // Nhãn k t qu this.add(lblKq);
this.add(new Label());
// Các nút nh n
btnCong = new Button(“Cong”); // Nút c ng btnCong.addActionListener(this); // B t s ki n this.add(btnCong);
btnTru = new Button(“Tru”); // Nút tr btnTru.addActionListener(this);
this.add(btnTru);
btnNhan = new Button(“Nhan”); // Nút nhân btnNhan.addActionListener(this);
this.add(btnNhan);
btnChia = new Button(“Chia”); // Nút chia btnChia.addActionListener(this);
this.add(btnChia);
btnThoat = new Button(“Thoat”); // Nút thoát btnThoat.addActionListener(this);
this.add(btnThoat); }
/* Ph ng th c x lí s ki n nút đ c nh n */ public void actionPerformed(ActionEvent ae){
float x = Float.parseFloat(txt1.getText()); float y = Float.parseFloat(txt2.getText()); float kq = 0;
if(ae.getSource() == btnCong) // C ng hai s kq = x + y;
if(ae.getSource() == btnTru) // Tr hai s kq = x - y;
if(ae.getSource() == btnNhan) // Nhan hai s kq = x*y;
if(ae.getSource() == btnChia)&&(y != 0) // Chia hai s kq = x/y;
if(ae.getSource() == btnThoat) // Thốt kh i ch ng trình System.exit(0);
// Thay đ i n i dung k t qu
lblKq.setText(“Ket qua la: ” + String.valueOf(kq)); repaint(); // V l i các đ i t ng }
}
Khi nhúng applet này vào m t trang html b t kì, ta có th ki m tra th y r ng nó có ch c n ng t ng t nh ng d ng 6.7.
L u ý, s khác nhau gi a m t application và m t applet:
• Application là m t ng d ng Java đ c l p, nó có th ch y đ c l p trên máy o Java. Trong khi đó, applet ch ch y đ c khi nhúng trong m t trang html, ch y nh vào các trình duy t web có h tr Java.
• Application ch y d a vào hàm main(). Trong khi đó, applet khơng có hàm main().
• hi n th các thông báo, application dùng System.out.println(). Trong khi đó, applet dùng ph ng th c drawString() c a l p Graphics.
6.4.3 Truy n tham s cho Applet
Trong nhi u tr ng h p, applet ph i ph thu c vào các tham s bên ngồi truy n vào. Khi đó ta có th dùng th PARAM c a html đ truy n tham s cho applet. Cú pháp:
<APPLET CODE = “Tên_file_applet.class” WIDTH = “Chi u_r ng”
HEIGHT = “Chi u_cao”>
<PARAM NAME=”Tên_bi n” VALUE=”Giá_tr ”> … // Các tham s khác
</APPLET>
Khi đó, trong mã ngu n c a applet, ta dùng ph ng th c getParameter() đ đ c giá tr các tham s
đ c truy n vào:
getParameter(Tên_bi n);
Ch ng trình 6.19 minh ho vi c truy n tham s cho m t applet: Applet mơ ph ng giao di n tìm ki m: m t nhãn h ng d n, m t ô v n b n và m t nút nh n. Tu vào ngôn ng mà nhãn và nút nh n có giá tr text khác nhau. Bi n ngơn ng là m t tham s truy n t trình duy t vào. ( ây là mô ph ng giao di n, c ch tìm ki m khơng ho t đ ng).
Ch ng trình 6.19
package vidu.chuong6; import java.awt.*; import java.applet.*;
public class ParamDemo extends Applet{ Label lbl;
TextField txt; Button btn;
public void init(){
this.setLayout(new GridLayout(2,2)); //Ch đ hi n th 6 dòng, 2 c t String langue = getParameter(“langue”);// Lo i ngôn ng
if(langue.equals(“vn”)){ // Ti ng Vi t
lbl = new Label(“Nhap tu khoa”); // Nhãn s th nh t btn = new Button(“Tim kiem”); // Nút c ng
}else if(langue.equals(“fr”)){ // Ti ng Pháp lbl = new Label(“Tapez des mots”);
btn = new Button(“Chercher”);
}else{ // Ti ng Anh, m c đ nh lbl = new Label(“Enter keys”);
btn = new Button(“Search”); } txt = new TextField(); this.add(lbl); this.add(txt); this.add(btn); } }
Khi đó, applet ph i đ c nhúng vào trang html v i đo n mã nh sau:
<APPLET CODE = “ParamDemo.class” WIDTH = 200 HEIGHT = 20> <PARAM NAME=”langue” VALUE=”vn”>
</APPLET>
Ta có th thay th value c a param b ng các giá tr “vn”, “fr” và “en” đ th y đ c các ch đ
ngôn ng khác nhau đ c hi n th trong applet.