1 Chng 6 Applets Sau khi kết thúc chương này, bạn có thể nắm được các nội dung sau: Sau khi hoc xong chng nay, ban co thê nm đc cac nơi dung sau: Hiêu đc cac Applet cua Java Phân biêt applet va cac ng dung application Tim hiêu chu trinh sơng cua mơt applet Tao cac applet Hiên thi cac hinh anh s dung applet Trun tham sơ cho applet Tim hiêu ng dung cua applet trong GUI 6.1 Java Applet Applet la mơt chng trinh Java co thê chay trong trinh dut web. Tât ca cac applet đêu la cac lp con cua lp ‘Applet’. Lp Applet thc package ‘java.applet’. Lp Applet bao gơm nhiêu phng thc đê điêu khiên qua trinh thc thi cua applet. ê tao applet, ban cân import hai goi sau: java.applet java.awt 6.2 Câu truc cua mơt Applet Mơt Applet đinh nghia câu truc cua no t 4 s kiên xay ra trong st qua trinh thc thi. ơi vi mơi s kiên, mơt phng thc đc goi mơt cach t đơng. Cac phng thc nay đc minh hoa trong bang 6.1 iêu quan trong la khơng phai luc nao applet cung bt đâu t ban đâu. Ma no bt đâu t vi tri tiêp theo cua qua trinh thc thi trc đo. Ngoai nhng phng thc c ban nay, con co nhng phng thc ‘paint()’ va ‘repaint()’. Phng thc paint() dung đê hiên thi mơt đng thng (line), text, hoc mơt hinh anh trên man hinh. ơi sơ cua phng thc nay la đơi tng cua lp Graphics. Lp nay thc goi java.awt. Câu lênh sau đc dung đê import lp Graphics: import java.awt.Graphics; Phng thc Chc nng init() c goi trong qua trinh khi tao applet. Trong qua trinh khi tao, no se tao đơi tng đê cung câp cho applet. Phng thc nay đc dung đê tai cac hinh anh đơ hoa, khi tao cac biên va tao cac đơi tng. start() c goi goi khi mơt applet bt đâu thc thi. Mơt khi qua trinh khi tao hoan tât, thi applet đc khi đơng. Phng thc nay đc dung đê khi đơng lai applet sau khi no đa ngng trc đo stop() c goi khi ngng thc thi mơt applet. Mơt applet bi ngng trc khi no bi huy. 2 destroy() c dung đê huy môt applet. Khi môt applet bi huy, thi bô nh, thi gian thc thi cua vi x ly, không gian đia đc tra vê cho hê thông. Bang 6.1: cac phng thc cua môt applet Phng thc ‘repaint()’ đc dung khi ca sô cân câp nhât lai. Phng thc nay chi cân môt thông sô. Tham sô nay la đôi tng cua lp Graphics. Applet s dung phng thc ‘showStatus()’ đê hiên thi thông tin trên thanh trang thai. Phng thc co tham sô thuôc kiêu d liêu String. ê lây cac thông tin cua applet, user co thê overide phng thc ‘getAppletInfo()’ cua lp Applet. Phng thc nay tra vê 1 đôi tng kiêu String. Cac phng thc cua applet init(), start(), stop(), destroy(), va paint() đc tha kê t môt applet. Nhng mc đinh nhng phng thc nay không thc thi môt thao tac nao ca. ây la vi du đn gian cua applet. Câu lênh sau tao môt lp co tên la ‘Applet1’, lp nay se kê tha tât ca cac phng thc va biên cua lp ‘applet’. public class Applet1 extends Applet Phng thc init() va paint() thng đc dung đê thc hiên môt sô ham đê khi tao va ve applet. Phng thc ‘g.drawstring()’ chi ra vi tri ma đoan vn ban đc ve đâu trên man hinh. Chng trinh 6.1 hiên thi môt chuôi dong 70 va côt 80: Chng trinh 6.1 import java.awt.*; import java.applet.*; public class Applet1 extends Applet { int num; public void init() { num = 6; } public void paint (Graphics g) { g.drawString (“Hello to Applet. Chapter ” + num, 70, 80); showStatus (getAppletInfo()); //Hiên thi môt chuôi đc tra vê t ham getAppletInfo() trên thanh trang thai } public String getAppletInfo() //user overrides { return “Created by Aptech”; } 3 } S dung cu phap sau đê dich môt Applet: javac Applet1.java ê thc thi môt applet, ta cân tao môt file HTML. File HTML nay s dung the applet. The applet nay lây tham sô đâu tiên la đng dân cua file applet. The applet co hai thuôc tinh sau: Width Height ê truyên tham sô vao applet, s dung param, sau đo la the value. Sau đây la vi du cua the applet: <applet code=Applet1 width=300 height=200> </applet> Luc nay, ta co thê thc thi applet nay bng cach dung trinh xem applet. ây la công cu cua JDK. ê chay file HTML trong trinh xem applet, ta go câu lênh sau: Appletviewer abc.html // ‘abc.html’ la tên cua file HTML Môt tuy chon khac cua applet la ta thêm the applet nh la môt dong chu thich trong đoan code. Luc đo, applet đc dich, va thc thi bng cach s dung lênh sau: Appletviewer Applet1.java Sau đây la kêt qua cua chng trinh trên: 4 Hinh 6.1 Applet 6.2.1 S khac nhau giua Application va Applet Sau đây la s khac nhau gia application va applet: ê thc thi cac application chung ta dung trinh thông dich Java, trong khi đo applet co thê chay đc trên cac trinh duyêt (co hô tr Java) hay s dung công cu AppletViewer, công cu nay đi kem vi JDK. Qua trinh thc thi cua application bt đâu t phng thc ‘main()’. Tuy nhiên applet thi không lam nh vây. Cac application s dung ‘System.out.println()’ đê hiên thi kêt qua ra man hinh trong khi đo applet s dung phng thc ‘drawstring()’ đê xuât ra man hinh. Môt điêu đang lu y la môt chng trinh Java đn le thi co thê va la application va la applet. Chc nng cua applet đc bo qua khi no đc thc thi nh la môt application va ngc lai. Chng trinh 6.2 se minh hoa điêu nay Chng trinh 6.2 import java.applet.Applet; import java.awt.*; /* <applet code = "both" width = 200 height = 100> </applet> */ public class both extends Applet { Button btn; public void init() { btn = new Button ("Click"); } public void paint (Graphics g) { g.drawString ("Applet", 70, 50); } public static void main (String args[]) { both app = new both(); app.init(); System.out.println("Application Main"); 5 } } Sau khi biên dich chng trinh, no co thê đc thc thi nh la môt applet bng cach s dung cu phap sau: appletviewer both.java Kêt qua nh sau: Hinh 6.2 Applet Nêu chay chng trinh trên nh môt application, thi s dung cu phap sau: java both Kêt qua la: Hinh 6.3 Application Khi applet chay trên trinh duyêt web, đc điêm nay thc s hu ich khi ban muôn tai applet trong môt frame mi. Vi du: trong applet đc tao đê chat, môt sô website s dung môt ca sô chat riêng biêt đê chat. Ban cung co thê kêt hp cac đc điêm cua frame va applet vao trong môt chng trinh. 6.2.3 Nhng gii han bao mât trên applet 6 Co môt sô han chê ma applet không thê lam đc. Bi vi cac applet cua Java co thê pha hong toan bô hê thông cua user. Cac lâp trinh viên Java co thê viêt cac applet đê xoa file, lây cac thông tin cac nhân cua hê thông… Vi thê, cac applet cua java không thê lam cac viêc sau: Không thê đoc hoc ghi file trên hê thông file cua user. Không thê giao tiêp vi cac site internet, nhng chi co thê vi cac trang web co applet ma thôi. Không thê chay bât c chng trinh gi trên hê thông cua ngi đoc. Không thê tai bât c chng trinh đc lu tr trong hê thông cua user. Nhng gii han trên chi đung khi cac applet đc chay trên trinh duyêt Netscape Navigator hoc Microsoft Internet Explorer. 6.3 Chu trinh sông cua môt Applet Chu trinh sông cua môt Applet đc mô ta s đô di đây: Hinh 6.4 Chu trinh sông cua môt applet Trc tiên, applet đc tao. Bc kê tiêp la khi tao. iêu nay xay ra khi môt applet đc nap. Qua trinh nay bao gôm viêc tao cac đôi tng ma applet cân. Phng thc init() đc override đê cung câp cac hanh vi đê khi tao. Môt khi applet đc khi tao, applet se đc khi đông. Applet co thê khi đông ngay ca khi no đa đc ngng trc đo. Vi du, nêu trinh duyêt nhay đên môt liên kêt nao đo trang khac, luc đo applet se bi ngng, va đc khi đông tr lai khi user quay vê trang đo. S khac nhau gia qua trinh khi tao va qua trinh khi đông la môt applet co thê khi đông nhiêu lân, nhng qua trinh khi tao thi chi xay ra môt lân. Phng thc ‘start()’ đc override đê cung câp cac thao tac khi đông cho applet. Destroy Stop Creation Initalization Starting 7 Phng thc ‘stop()’ chi đc goi khi user không con trang đo na, hoc trang đo đa đc thu nho lai di thanh taskbar. Kê tiêp la phng thc ‘destroy()’. Phng thc nay giup applet don dep trc khi no đc giai phong khoi vung nh, hoc trc khi truyêt duyêt kêt thuc. Phng thc nay đc dung đê huy nhng luông (thread) hay qua trinh đang chay. Phng thc ‘destroy()’ khac vi phng thc finalize() la phng thc destroy() chi dung cho applet, trong khi finalize() la cach tông quat đê don dep applet. Phng thc paint() cung la môt phng thc quan trong khac. Phng thc nay cho phep ta hiên thi môt cai gi đo trên man hinh. Co thê la text, đng thng, mau nên, hoc hinh anh. Phng thc nay xay ra nhiêu lân trong suôt qua trinh applet tôn tai. Phng thc nay thc thi môt lân sau khi applet đc khi tao. No se lp đi lp lai khi di chuyên t ca sô trinh duyêt sang ca sô khac. No cung xay ra khi ca sô trinh duyêt thay đôi vi tri cua no trên man hinh. Phng thc ‘paint()’ co môt tham sô. Tham sô nay la đôi tng cua lp Graphics. Lp Graphics thuôc lp java.awt, chung ta phai import trong đoan code cua applet. Chung ta co thê s dung đoan ma sau: import java.awt.Graphics; 6.4 Truyên tham sô cho Applet Trong chng trinh sau, chung ta se truyên tham sô cho applet. Thanh phân nut ‘bNext’ co tên đc truyên nh la môt tham sô. Phng thc ‘init()’ se kiêm tra tham sô co thên la ‘mybutton’. Sau đo, no tao môt nut vi chuôi đo nh la tên cua nut. Nêu không co tham sô truyên vao, nut đo co tên mc đinh la ‘Default’. Bây gi chung ta đinh nghia the <PARAM> trong đoan ma HTML nh sau: /* <applet code=”Mybutton1” width=”100” height=”100”> <PARAM NAME=”mybutton” value=”Display Dialog”> </applet> */ Chng trinh 6.3 import java.awt.*; import java.applet.*; /* <applet code="Mybutton1" width="200" height="100"> <PARAM NAME="mybutton" value="Display Dialog"> </applet> */ 8 public class Mybutton1 extends Applet { Button bNext; public void init() { /*getParameter returns the value of the specified pareameter in the form of a String object*/ String str = getParameter("mybutton"); //when no parameter is passed if (str==null) str = new String ("Default"); //when parameter is passed bNext = new Button(str); add (bNext); } } Sau đây la kêt qua cua chng trinh trên: Hinh 6.5: truyên tham sô cho applet Bây gi chung ta se s dung lp Graphics đê ve cac hinh chng han nh: đng thng, hinh oval, va hinh ch nhât. Chung ta se hoc lp Font trong cac phân sau. Lp nay co thê dung đê in vn ban bng bât c font nao. 6.5 Lp Graphics Java cung câp goi AWT cho phep ta ve cac hinh đô hoa. Lp Graphics bao gôm tâp hp rât nhiêu phng thc. Nhng phng thc nay đc s dung đê ve bât c hinh nao trong cac hinh sau: Oval Rectangle Square Circle Lines 9 Text Ban co thê ve nhng hinh nay bng bât c mau nao. Frame, Applet va canvas la cac môi trng đê hiên thi đô hoa. ê ve bât c hinh anh nao chung ta cân phai co nên đô hoa (Graphical Background). ê co đc môt nên đô hoa, chung ta goi phng thc ‘getGraphics()’ hay bât c phng thc nao trong cac phng thc sau đây: repaint() c goi khi cân ve lai nhng đôi tng đa ve. update(Graphics g) c goi môt cach t đông bi phng thc ‘repaint()’. Phng thc nay se xoa nhng đôi tng đa ve, va truyên no cho đôi tng cua lp Graphics đê goi phng thc ‘paint()’; paint(Graphics g) c goi bi phng thc update(). ôi tng đc truyên cho phng thc nay đc dung đê ve. Phng thc nay dung đê ve cac hinh anh đô hoa khac nhau. Viêc goi phng thc paint() lp đi lp lai thông qua phng thc repaint() se xoa đi cac hinh đa ve trc đo. ê ve cac hinh mi ma vân gi lai nhng hinh đa ve trc đo, chung ta cân override lai phng thc upate(). Public void update (Graphics g) { paint (g); } đây, phng thc update() se không xoa nhng đôi tng đa ve, nhng chi goi phng thc paint(). ê lam đc điêu nay, no truyên đôi tng cua lp Graphics hoc GraphicsContext cho phng thc paint(). đây, đôi tng cua lp Graphics la ‘g’. 6.5.1 Ve cac chuôi, cac ky t va cac byte Chng trinh sau minh hoa cac ve cac chuôi, ky t va cac byte. ê ve hoc in môt chuôi, lp Graphics cung câp phng thc ‘drawString()’. Cu phap nh sau: DrawString (String str, int xCoor, int yCoor); Ba tham sô la: Chuôi cân ve. Toa đô X trên frame, ni chuôi cân đc ve. Toa đô Y trên frame, ni chuôi cân đc ve. 10 ê ve hoc xuât cac ky t trên frame, lp Graphics cung câp phng thc ‘drawChars’. Cu phap nh sau: DrawChars (char array[], int offset, int length, int xCoor, int yCoor); Chu thich cac tham sô: Mang cac ky t. Vi tri bt đâu, ni cac ky t đc ve. Sô cac ky t cân đc ve. Toa đô X, ni cac ky t cân đc ve. Toa đô Y, ni cac ky t cân đc ve. Lp Graphics cung câp phng thc ‘drawBytes()’ đê ve hoc in cac byte ra frame. Cu phap cua phng thc nay nh sau: DrawBytes (byte array[], int offset, int length, int xCoor, int yCoor); 5 tham sô cua phng thc trên la: Mang cac byte. Vi tri offset hay vi tri bt đâu. Sô byte cân ve. Toa đô X. Toa đô Y. ôi vi môt ky t hoc môt mang cac byte, chung ta co thê in môt phân cua mang ma thôi. đây, toa đô x va y la toa đô tinh theo dong. Chng trinh 6.4 minh hoa cach ve chuôi, cac ky t va cac byte. Chng trinh 6.4 import java.awt.*; public class DrawStrings extends Frame { public DrawStrings() { super ("Draw strings, characters, bytes"); setSize (300, 300); setVisible (true); } public void paint(Graphics g) { g.drawString ("Good Morning", 50, 50); g.drawString ("Good Afternoon", 50, 75); g.drawString ("Good Night", 50, 100);