Đ 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 • fillRoundRect(int xCoor, int yCoor, int width, int height, int arcwidth, int archeight): v hình ch nh t bo góc đ c. ẽ ữ ậ ặ Trong đó: arcwidth: làm tròn góc trái và góc ph i c a hình ch nh t. ả ủ ữ ậ archeight: làm tròn góc trên đ nh và góc đáy c a hình ch nh t.ỉ ủ ữ ậ Ví d , arcwidth = 20 có nghĩa là hình ch nh t đ c làm tròn c nh trái và c nh ph iụ ữ ậ ượ ạ ạ ả m i c nh 10 pixel.ỗ ạ • draw3Drect(int xCoord, int yCoord, int width, int height, boolean raised): V hìnhẽ ch nh t 3D.ữ ậ • drawArc(int xCoord, int yCoord, int width, int height, int arcwidth, int archeight): V hình cung.ẽ • fillArc(int xCoord, int yCoord, int width, int height, int arcwidth, int archeight): V hình cung đ c.ẽ ặ Trong đó: xCoord: To đ x; yCoord: To đ y.ạ ộ ạ ộ width: Chi u r ng c a cung đ c v ; height: Chi u cao c a cung đ c v .ề ộ ủ ượ ẽ ề ủ ượ ẽ arcwidth: Góc b t đ u; archeight: Đ r ng c a cung (góc c a cung) so v i góc ban đ u.ắ ầ ộ ộ ủ ủ ớ ầ • drawPolyline(int xArray[ ], int yArray[ ], int totalPoints): V nhi u đ ng th ngẽ ề ườ ẳ Trong đó: xArray: M ng l u tr to đ x c a các đi m; yArray: M ng l u tr to đ yả ư ữ ạ ộ ủ ể ả ư ữ ạ ộ c a các đi m; totalPoints: T ng s đi m c n v .ủ ể ổ ố ể ầ ẽ • setFont(new Font(“Times Roman”, Font.BOLD, 15)): Đ t Font cho ch ,ặ ữ (Font.BOLD, Font.PLAIN, Font.ITALIC) • drawPolygon(int x[ ], int y[ ], int numPoints):V đa giác. ẽ • fillPolygon(int x[ ], int y[ ], int numPoints): V đa giác đ c. ẽ ặ Trong đó: x[ ]: M ng l u tr to đ x c a các đi m; y[ ]: M ng l u tr to đ y c aả ư ữ ạ ộ ủ ể ả ư ữ ạ ộ ủ các đi m; numPoints: T ng s đi m c n v ; setColor(Color c): Đ t màu v .ể ổ ố ể ầ ẽ ặ ẽ B ng m t s màu c b n: ả ộ ố ơ ả Color.white Color.black Color.orange Color.gray Color.lightgray Color.darkgray Color.red Color.green Color.blue Color.pink Color.cyan Color.magenta Color.yellow 113 . 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. 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