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);