You are on page 1of 40

1

Chng 5 : AWT

Sau khi hoc xong chng nay, ban co the nam c cac noi dung sau:

Hieu ve AWT
S dung cac Component
S dung cac Container
S dung cac Layout Manager
X ly s kien vi cac Component

5.1 Gii thieu ve AWT

Cac ng dung phan mem hien nay vo cung than thien v c trnh bay nhieu man hnh
giao dien o hoa ep mat. Cac ngon ng lap trnh hien nay c cung cap cac oi tng o
hoa, chung co the c ieu khien bi ngi lap trnh vien, hay bi ngi s dung. Mot
trong so nhng ket qua quan trong nhat chnh la cac ngon ng hien nay c da tren Giao
dien ngi dung o hoa (Graphical User Interface - GUI). Trong chng nay, ta se thao
luan ve Java ho tr tnh nang DUI cung cac s thi hanh cua chung.

GUI cung cap chc nang nhap lieu theo cach than thien vi ngi dung. GUI bien oi t
ng dung en ng dung va co the cha nhieu ieu khien nh textbox, label, listbox hay cac
ieu khien khac. Cac ngon ng lap trnh khac nhau cung cap nhieu cach khac nhau e tao
GUI. Cac phan mem giong nh VB hay VC++ co the cung cap chc nang keo va tha trong
khi o phan mem giong nh C++ yeu cau ngi lap trnh phai viet toan bo ma e xay dng
mot GUI.

Mot phan t (element) GUI c thiet lap bang cach s dung thu tuc sau:

Tao element, instance, checkbox, label, hay listbox
Xac nh s xuat hien khi au cua cac phan t
Quyet nh xem phan t o co nen chiem gi v tr c ch ra hay khong
Them phan t vao giao dien tren man hnh

Mot thanh phan (component) GUI la mot oi tng trc quan. Ngi dung tng tac vi oi
tng nay thong qua con tro chuot hay ban phm. Cac thanh phan nh la button, label v.v
co the c nhn thay tren man hnh. Bat ky thao tac nao ap dung en tat ca cac thanh
phan GUI eu c tm thay trong lp oi tng Component. e tao cac thanh phan GUI
nay, chung ta can s dung cac lp ton tai trong goi java.awt.

2
AWT co ngha la Abstract Windowing Toolkit. AWT la mot bo cac lp trong Java cho
phep chung ta tao mot GUI va chap nhan cac nhap lieu cua ngi dung thong qua ban
phm va chuot. AWT cung cap cac item khac nhau e tao mot GUI hieu qua va loi cuon
ngi s dung. Cac item nay co the la:

Thung cha (Container)
Thanh phan (Component)
Trnh quan ly cach trnh bay (Layout manager)
o hoa (Graphic) va cac tnh nang ve (draw)
Phong ch (Font)
S kien (Event)

Goi AWT cha cac lp, giao dien va cac goi khac. Hnh sau ay mo ta mot phan nho cua
he thong phan cap lp AWT.

CheckboxGroup MenuComponent BorderLayout
Component FlowLayout GridLayout
Object


Hnh 5.1 He thong cay phan cap lp AWT

5.2 Container

Container la vung ma ban co the at cac thanh phan cua ban vao o. Bat c vat g ma ke
tha t lp Container se la mot container. Applet la mot container, applet c dan xuat t
panel, lp panel lai c dan xuat t lp Container.

Mot container co the cha nhieu phan t, cac phan t nay co the c ve hay c to mau
tuy thch. Ban hay xem container nh mot ca so. a la ca so th phai co khung (frame),
pane, latch, hook, va cac thanh phan co kch thc nho hn.

Goi java.awt cha mot lp goi la Container. Lp nay trc tiep hay gian tiep phat sinh ra hai
container c s dung pho bien nhat la Frame va Panel.

Frame va Panel la cac container thng c s dung. Frame la cac ca so c tach rieng
nhau nhng ngc lai panel la cac vung c cha trong mot ca so. Panel khong co cac
ng vien, chung c trnh bay trong mot ca so do trnh duyet hay appletviewer cung
3
cap. Appletviewer la mot cong cu c JDK ho tr e xem cac applet. Frame la lp con
cua Window. Chung c trnh bay trong mot ca so oc lap, ca so nay co cha cac
ng vien xung quanh.

5.2.2 Frame

Frame khong phu thuoc vao applet va trnh duyet. Frame co the hoat ong nh mot
container hay nh mot thanh phan (component). Ban co the s dung mot trong nhng
constructor sau e tao mot frame:

Frame(): Tao mot frame vo hnh (khong nhn thay c)
Frame(String, title): Tao mot frame vi nhan e trong.

Chng trnh 5.1 minh hoa cach tao mot Frame.

Chng trnh 5.1

import java.awt.*;
class FrameDemo extends Frame
{
public FrameDemo(String title)
{
super(title);
}
public static void main(String args[])
{
FrameDemo f=new FrameDemo(I have been Frameed!!!);
f.setSize(300,200);
f.setVisible(true);
}
}

Lp c nh ngha Framedemo la mot lp con cua lp Frame. Lp FrameDemo nay co
mot constructor, trong contructor nay ta cho goi ham super(). Tien trnh nay se lan lt goi
constructor cua lp con (trong trng hp nay la frame). Muc ch cua super() la goi
constructor cua lp cha me. Tien trnh nay se tao mot oi tng cua lp con, lp con nay se
tao frame. Them vao o, no cung se cho phep oi tng frame nhn thay c thong qua
pham vi lp. Tuy nhien, frame van khong nhn thay c va khong co kch thc. e lam
c ieu nay, ta s dung hai phng thc nam trong phng thc main: setSize() va
setVisible().

4
Ket xuat cua chng trnh giong nh hnh 5.2



Hnh 5.2 Frame

5.2.2 Panel

Panel c s dung e nhom mot so cac thanh phan lai vi nhau. Cach n gian nhat e
tao mot panel la s dung ham constructor cua no, ham Panel().

Chng trnh 5.2 ch ra cach tao mot panel:

Chng trnh 5.2

import java.awt.*;
class Paneltest extends Panel
{
public static void main(String args[])
{
Paneltest p=new Paneltest();
Frame f=new Frame(Testing a Panel);
f.add(p);
f.setSize(300,200);
f.setVisible(true);
}
public Paneltest()
{
}
}

5
Panel khong the c nhn thay trc tiep. Do o, chung ta can them panel en mot frame.
V vay ta can tao mot frame mi va them Panel mi c tao nay vao no. Tuy nhien,
frame se khong nhn thay c, va khong co kch thc. Chung ta s dung hai phng thc
trong phng thc main setSize() va setVisible() e thiet lap kch thc va hien th
frame.

Ket xuat cua chng trnh:



Hnh 5.3 Panel

5.2.3 Dialog

Lp Dialog tng t nh lp Frame, ngha la Dialog la lp con cua lp Window. oi
tng dialog c tao nh sau:

Frame myframe=new Frame(My frame); // calling frame
String title = Title;
boolean modal = true; // whether modal or not
Dialog dlg=new Dialog(myframe, title, modal);

So hang modal ch ra rang dialog se ngan chan bat ky tng tac nao xay en vi cac ca
so c m khac, trong khi dialog ang c hien th tren man hnh. Kieu hop thoai nay
ngan chan ngi dung tng tac vi cac ca so khac tren man hnh, cho ti khi dialog c
ong lai.

5.3 Thanh phan (Component)

Mot component co the c at tren giao dien ngi dung, co the c thay oi kch thc
hay lam cho nhn thay c. V du c dung pho bien nhat la textfield, label, checkbox,
6
textarea v.v Cac thanh phan cao cap khac nh scrollbar, scrollpane va dialog cung ton tai.
Tuy nhien chung khong c s dung thng xuyen.

TextComponent
Button
Label
Checkbox
List
Choice
Container
Canvas
Scrollbar
C
o
m
p
o
n
e
n
t
TextField
TextArea
Panel
Window
Applet
Frame
Dialog


Hnh 5.4 Cac lp oi tng thanh phan

Bay gi chung ta hay xet mot so thanh phan thng c s dung.

5.3.1 Nhan (Label)

Lp nay c s dung e trnh bay mot String. No khong the c sa oi. ay la mot
chuoi ch oc. S dung mot trong nhng constructor sau ay e tao mot label:

Label()
Tao mot Label trong.

Label(String labeltext)
Tao mot Label vi van ban c cho.

Label(String labeltext, int alignment)
Tao mot Label vi mot che o canh le alignment c cho, alignment co the la
Label.LEFT, Label.RIGHT hay Label.CENTER.

Cac phng thc c s dung pho bien cua label c trnh bay bang ben di:
7

Phng thc Chc nang
setFont(Font f) Thay oi phong ch ang c chon cua Label
setText(String s) Thiet lap nhan cho Label
getText() Lay noi dung hien hanh cua Label

Bang 5.1 Cac phng thc cua Label

Chng trnh 5.3 ch ra cach s dung cua Label:

Chng trnh 5.3

import java.awt.*;
class Labeltest extends Frame
{
Label label1=new Label(This is just a label);
public Labeltest(String title)
{
super(title);
add(label1);
}
public static void main(String args[])
{
Labeltest f=new Labeltest(Label);
f.setSize(300,200);
f.show();
}
}

label1=new Label(Enter your details :);
Tao oi tng Label

add(label1);
Label se hien th ch khi no c them vao container. ay, Frame la container ma thanh
phan Label c them vao. Viec nay c thc hien bang cach s dung phng thc add().

Ket xuat cua chng trnh c ch ra hnh 5.5

8


Hnh 5.5 Label

5.3.2 O van ban (TextField)

Mot textfield la mot vung ch cha mot dong n, trong o van ban co the c trnh bay
hay c nhap vao bi ngi dung. Trong Java, mot trong nhng constructor sau co the
c s dung e tao mot textfield:

TextField(): Tao mot textfield mi.
TextField(int columns): Tao mot textfield mi vi so cot c cho.
TextField(String s): Tao mot textfield mi vi chuoi van ban c cho.
TextField(String s, int columns): Tao mot textfield mi vi nhan va so cot c cho.

Cac phng thc thng c s dung cua oi tng TextField c tom tat trong bang
sau:

Phng thc Chc nang
setEchoChar(char) Thiet lap cac k t c trnh bay trong
dang cua mot k t c cho.
setText(String s) Thiet lap nhan cho TextField.
getText() Tra ve nhan cua TextField.
setEditable(boolean) Xac nh trng co the c soan thao
hay khong. Trng ch c soan thao
khi gia tr nay c at la True.
isEditable() Xac nh xem trng co ang trong
mode soan thao hay khong. Gia tr tra
ve kieu Boolean.

Bang 5.2 Cac phng thc cua TextField

9
Chng trnh 5.4 ch ra cach s dung cua TextField:

Chng trnh 5.4

import java.awt.*;
class TextFieldtest extends Frame
{
TextField tf1=new TextField(30);
public TextFieldtest(String title)
{
super(title);
setLayout(new FlowLayout());
add(tf1);
}
public static void main(String args[])
{
TextFieldtest f=new TextFieldtest(TextField);
f.setSize(300,200);
f.show();
}
}

Trong chng trnh nay, chung ta s dung phng thc setLayout() e thay oi cach trnh
bay cua cac thanh phan tren man hnh. Layout manager co chc nang xap xep cac thanh
phan trong mot container.

Ket xuat cua chng trnh c ch ra hnh ben di:



Hnh 5.6 TextField

10
5.3.3 Vung van ban (TextArea)

Mot Textarea c s dung khi van ban nhap vao tren hai hay nhieu dong. Textarea co
mot scrollbar. Thanh phan TextArea la mot trng van ban co the c soan thao vi ac
tnh nhieu dong.

e tao mot Textarea, lam theo cac bc sau:

1) Tao mot phan t.
2) Ch ra so dong hay so cot phan t nay can co.
3) Bo tr phan t nay tren man hnh.

Trong Java, ban co the s dung cac constructor sau e tao TextArea:

TextArea(): Tao mot TextArea mi.
TextArea(int rows, int cols): Tao mot TextArea mi vi so lng cot va dong c
cho.
TextArea(String text): Tao mot TextArea mi vi nhan c cho.
TextArea(String text, int rows, int cols): Tao mot TextArea mi vi nhan, so dong va
so cot c cho.

Cac phng thc thng c s dung nhieu nhat cua TextArea:

Phng thc Chc nang
setText(String) Thiet lap nhan cho TextArea.
getText() Tra ve nhan cua TextArea.
setEdiable(boolean) Xac nh xem trng co the c soan thao hay
khong. Trng co the c soan thao khi gia tr
nay la True.
isEdiable() Xac nh xem trng co ang trong mode soan
thao c khong. Tra ve gia tr la kieu Boolean.
insertText(String, int) Chen String c cho vao v tr index c cho.
replaceText(String, int, int) Thay the van ban nam gia v tr int, int c
cho.

Bang 5.3 Cac phng thc cua TextArea

Chng trnh 5.5 ch ra cach s dung cua TextArea:

11
Chng trnh 5.5

import java.awt.*;
class TextAreatest extends Frame
{
Label lbl=new Label(Details);
TextArea ta1=new TextArea();
public TextAreatest(String title)
{
super(title);
setLayout(new FlowLayout());
add(lbl);
add(ta1);
}
public static void main(String args[])
{
TextAreatest t=new TextAreatest(TextArea);
t.setSize(300,200);
t.show();
}
}

Ket xuat cua chng trnh c ch ra hnh ben di:



Hnh 5.7 TextArea

5.3.4 Button

Nut nhan hay con goi la nut lenh la mot phan nguyen cua bat ky GUI nao. S dung button
la cach de nhat e chan cac tac ong cua ngi dung.

e tao mot button, ban lam theo cac bc sau:

1) Tao phan t button vi mot nhan ch ra muc ch cua button.
12
2) Bo tr phan t nay tren man hnh.
3) Hien th phan t tren man hnh.

S dung mot trong hai constructor sau e tao cac button trong Java:

Button()
Button(String text)

S dung setLabel() va getLabel() e thiet lap va nhan ve nhan cua button.

V du n gian sau ay se tao ra 3 button c trnh bay trong chng trnh 5.6:

Chng trnh 5.6

import java.awt.*;
class Buttontest extends Frame
{
Button b1 = new Button(red);
Button b2 = new Button(Green);
Button b3 = new Button(Blue);

public Buttontest(String title)
{
super(title);
setLayout(new FlowLayout());
add(b1);
add(b2);
add(b3);
}
public static void main(String args[])
{
Buttontest t= new Buttontest(Button);
t.setSize(300,200);
t.show();
}
}

Ket xuat cua chng trnh c ch ra hnh 5.8.

13


Hnh 5.8 Button

5.3.5 Checkbox va RadioButton

Checkbox c s dung khi ngi dung tien hanh chon mot hay nhieu tuy chon. Ngi
dung phai click tren cac checkbox e chon hay bo chon chung. Mot radiobutton cung tng
t nh mot checkbox. No c s dung nh mot option button e xac nh cac chon la.
Ban co the ch chon mot button trong nhom cac nut radiobutton, ngc lai ban co the chon
nhieu hn mot checkbox tai mot thi iem.

Lam theo cac bc sau e tao cac checkbox hay radiobutton:

1) Tao phan t.
2) Quyet nh trang thai khi au cua phan t (chon hay khong chon).
3) Bo tr cac phan t tren man hnh.
4) Hien th cac phan t tren man hnh.

Thanh phan checkbox co the s dung mot lp phu c goi la CheckboxGroup e tao ra
cac radiobutton.

S dung cac constructor sau e tao cac checkbox trong Java:

Checkbox(): Tao mot checkbox trong.
Checkbox(String text): Tao mot checkbox vi nhan c cho.

e tao cac radiobutton, au tien chung ta tao oi tng CheckboxGroup nh sau:

CheckboxGroup cg=new CheckboxGroup();

Sau o chung ta tao cac button, nh ch ra di ay:
14

Checkbox male=new Checkbox(male, cg, true);
Checkbox female=new Checkbox(female, cg, false);

Chung ta s dung cac phng thc setState() va getState() e thiet lap va nhan ve trang
thai cua checkbox.

Chng trnh 5.7 minh hoa cach s dung cua cac checkbox va cac radiobutton:

Chng trnh 5.7

import java.awt.*;
class Checkboxtest extends Frame
{
Label l1=new Label(CheckBoxes);
Checkbox b1=new Checkbox(red,true);
Checkbox b2=new Checkbox(Green,false);
Checkbox b3=new Checkbox(Blue,false);
Label l2=new Label(Radiobuttons);
CheckboxGroup cb=new CheckboxGroup();
Checkbox b4=new Checkbox(small,cb,true);
Checkbox b5=new Checkbox(medium,cb,false);
Checkbox b6=new Checkbox(large,cb,false);

public Checkboxtest(String title)
{
super(title);
setLayout(new GridLayout(8,1));
add(l1);
add(b1);
add(b2);
add(b3);
add(l2);
add(b4);
add(b5);
add(b6);
}
public static void main(String args[])
{
Checkboxtest t=new Checkboxtest(Checkbox and radiobutton);
t.setSize(300,200);
15
t.show();
}
}

au tien chung ta tao mot oi tng Frame, oi tng nay hoat ong nh mot container se
cha thanh phan checkbox ma ta a tao. Sau o ta tao 5 checkbox, khong mot checkbox
nao c anh dau chon. e lam c ieu nay, ta a gia tr False nh mot tham so cho
ham contructor Checkbox, ngoai ra con co mot tham so String la nhan cua checkbox. Neu
muon hien th cac ieu khien nay theo dang li, ta phai thiet lap cach trnh bay en dang
GridLayout co 6 dong va 1 cot. Cuoi cung, ta tao mot bieu hien cho lp Checkboxtest va
thiet lap kch thc cho frame. e hien th no, ta cho goi phng thc show().

Ket xuat c ch ra hnh ben di:



Hnh 5.9 Checkbox

5.3.6 Danh sach chon la (Choice List)

Thnh thoang, rat can thiet e trnh bay mot danh sach cac chon la en ngi dung tren
mot GUI. Ngi dung co the click vao mot hay nhieu item t danh sach. Mot danh sach
chon la c tao bang cach s dung mot so cac chuoi (String) hay cac gia tr van ban.

e tao cac danh sach chon la, hay lam theo cac bc c cho sau ay:

1) Tao danh sach cac phan t.
2) Them cac item (co kieu la String) vao danh sach, moi lan ch them c mot item.
3) Bo tr danh sach tren man hnh.
4) Hien th danh sach tren man hnh.

16
Java ho tr lp Choice cho phep chung ta tao cac danh sach cha nhieu item. Khi danh
sach va c tao ra, no se rong.

Choice colors=new Choice();

Moi thi iem ch them c mot item bang cach s dung phng thc addItem nh c
ch ra ben di:

colors.addItem(Red);
colors.addItem(Green);

Chng trnh 5.8 minh hoa cach tao mot danh sach chon la:

Chng trnh 5.8

import java.awt.*;
class Choicetest extends Frame
{
Label l1=new Label(What is your favorite color);
Choice colors=new Choice();

public Choicetest(String title)
{
super(title);
setLayout(new FlowLayout());
add(l1);
colors.addItem(White);
colors.addItem(Red);
colors.addItem(Orange);
colors.addItem(Green);
colors.addItem(Yellow);
colors.addItem(Blue);
colors.addItem(Black);
add(colors);
}
public static void main(String args[])
{
Choicetest t=new Choicetest(Choice list);
t.setSize(300,200);
t.show();
}
17
}

Ket xuat c ch ra hnh ben di:



Hnh 5.10 Danh sach chon la

5.4 Trnh quan ly cach trnh bay (Layout manager)

Layout manager ieu khien cach trnh bay vat ly cua cac phan t GUI nh la button,
textbox, option button v.v Mot layout manager t ong bo tr cac thanh phan nay trong
container.

Cac kieu trnh bay khac nhau:

Flow layout
Border layout
Card layout
Grid layout
GridBag Layout

Tat ca cac thanh phan ma chung ta va tao s dung layout manager mac nh. Cho v du,
FlowLayout la cach trnh bay mac nh cua mot applet. Layout manager nay se t ong
xap xep cac thanh phan. Tat ca cac thanh phan c at trong mot container, va c xap
xep en layout manager tng ng. Layout manager c thiet lap bang phng thc c
goi la setLayout().

Bay gi chung ta se tm hieu chi tiet cac cach trnh bay va cach bo tr cac thanh phan cua ta
vao nhng v tr mong muon.

5.4.1 FlowLayout manager
18

FlowLayout la layout manager mac nh cho cac applet va cac panel. Cac thanh phan
c xap xep t goc trai tren en goc phai di cua man hnh. Khi mot so thanh phan c
tao, chung c xap xep theo hang, t trai sang phai. Cac constructor cua FlowLayout:

FlowLayout mylayout = new FlowLayout() // constructor

//constructor with alignment specified

FlowLayout exLayout=new FlowLayout(FlowLayout.RIGHT);

setLayout(exLayout); //setting the layout to Flowlayout

Cac ieu khien co the c canh ve ben trai, ben phai hay gia. e canh cac ieu khien
ve ben phai, ban s dung cu phap sau:

setLayout(new FlowLayout(FlowLayout.RIGHT));

Chng trnh 5.9 minh hoa ve FlowLayout manager. ay, contructor khong can c goi
mot cach tng minh, bi v cau t nay c goi mac nh cho mot applet.

Chng trnh 5.9

import java.awt.*;
class Fltest extends Frame
{
Button b1=new Button(Center Aligned Button 1);
Button b2=new Button(Center Aligned Button 2);
Button b3=new Button(Center Aligned Button 3);

public Fltest(String title)
{
super(title);
setLayout(new FlowLayout(FlowLayout.CENTER));
add(b1);
add(b2);
add(b3);
}

public static void main(String args[])
{
19
Fltest t=new Fltest(Flow Layout);
t.setSize(300,200);
t.show();
}
}

Ket xuat cua chng trnh ch ra hnh 5.11.



Hnh 5.11 Flowlayout

5.4.2 BorderLayout Manager

BorderLayout la layout manager mac nh cho Window, Frame va Dialog. Layout
nay xap xep toi a 5 thanh phan trong mot container. Nhng thanh phan nay co the c
at cac hng North, South, East, West va Center cua container.

NORTH at nh cua container.
EAST at pha ben phai cua container.
SOUTH at pha di cua container.
WEST at pha ben trai cua container.
CENTER at gia cua container.

e them mot thanh phan vao vung North, ban s dung cu phap sau:

Button b1=new Button(North Button); // khai bao thanh phan
setLayout(new BorderLayout()); // thiet lap layout
add(b1,BorderLayout.NORTH); // them thanh phan vao layout

Cac thanh phan van gi nguyen v tr tng oi cua chung ke ca khi container b thay oi
kch thc. Cac thanh phan c at trong vung North, South c dan nam ngang
20
trong khi o cac thanh phan at trong vung East va West lai c dan thang ng. Cac
thanh phan c at trong vung center se c dan eu vao nhng khu vc nam gia cua
container.

add(b2,BorderLayout.CENTER); // them thanh phan vao vung center

Khi tat ca cac thanh phan c at vao cac vung tng ng, luc o Frame se giong nh
sau:



Hnh 5.12 BorderLayout

BorderLayout co the cha nhieu hn 5 thanh phan. e thc hien ieu nay, chung ta co the
s dung cac panel cua cac layout khac nhau e cha cac thanh phan, va sau o at cac
panel nay vao trong border layout.

5.4.3 CardLayout Manager

CardLayout co the lu tr mot ngan xep (stack) cac layout. Moi layout giong nh mot
bang (card). Bang thng la oi tng Panel. Mot thanh phan oc lap nh button se ieu
khien cach trnh bay cac bang lp tren cung.

au tien, chung ta bo tr tap hp cac thanh phan c yeu cau tren cac panel tng ng.
Moi panel se c bo tr vao cac layout khac nhau. Cho v du:

panelTwo.setLayout(new GridLayout(2,1));

Panel chnh se cha nhng panel nay. Chung ta thiet lap layout cua panel chnh la
Cardlayout nh sau:

CardLayout card=new CardLayout();
21

panelMain.setLayout(card);

Bc ke tiep la them cac panel khac vao panel chnh:

panelMain.add(Red Panel, panelOne);

panelMain.add(Blue Panel, panelTwo);

Phng thc add() s dung hai tham so. Tham so au tien la mot String lam nhan cua
panel va tham so th hai la ten oi tng Panel.

Chng trnh 5.10 minh hoa CardLayout:

Chng trnh 5.10

import java.awt.*;
import java.applet.*;
/*<applet code=CardLayoutDemo.class width=300 height=100></applet>*/
public class CardLayoutDemo extends Applet
{
Button back,next;
Label lbl1,lbl2,lbl3,lbl4;
TextField other1;
Panel p1,first,second,third,fourth;
CardLayout c1;
public void init()
{
back=new Button(Back);
next=new Button(Next);
add(back);
add(next);

c1=new CardLayout();
p1=new Panel();
p1.setLayout(c1);// Set panel layout to CardLayout

lbl1=new Label(First);
lbl2=new Label(Second);
lbl3=new Label(Third);
lbl4=new Label(Fourth);
22

//First panel
first=new Panel();
first.add(lbl1);

//Second panel
second=new Panel();
second.add(lbl2);

//Third panel
third=new Panel();
third.add(lbl3);

//Fourth panel
fourth=new Panel();
fourth.add(lbl4);

//Add panels to the card deck panel
p1.add(1,first);
p1.add(2,second);
p1.add(3,third);
p1.add(4,fourth);

add(p1);
}
}

Ket xuat cua chng trnh nh sau:



Hnh 5.13 CardLayout

23
Trong hnh ben tren, cac panel c them vao panel chnh nh la cac the rieng biet. V the
ch co the au tien mi c thay tren man hnh. Nhng ngi dung co the ieu hng sang
cac panel khac s dung cac phng thc cua CardLayout.

5.4.4. GridLayout Manager

GridLayout tr giup viec chia container vao trong o li. Cac thanh phan c at trong
cac dong va cac cot. Moi khung li nen cha t nhat mot thanh phan. Mot khung li c
s dung khi tat ca cac thanh phan co cung kch thc.

Constructor GridLayout c tao nh sau:

Gridlayout g1=new GridLayout(4,3);

4 la so dong va 3 la so cot.

Chng trnh 5.11 minh hoa cach trnh bay li:

Chng trnh 5.11

import java.awt.*;
class Gltest extends Frame
{
Button btn[];
String str[]={1, 2, 3, 4, 5, 6, 7, 8, 9};
public Gltest(String title)
{
super(title);
setLayout(new GridLayout(3,3));
btn=new Button[str.length];
for (int I=0; I<str.length;I++)
{
btn[I]=new Button(str[I]);
add(btn[I]);
}
}
public static void main(String args[])
{
Gltest t=new Gltest(Grid Layout);
t.setSize(300,200);
t.show();
24
}
}

Ket xuat chng trnh nh sau:



Hnh 5.14 Grid Layout

5.4.5 GridBagLayout Manager

GridBagLayout hieu qua va phc tap hn bat c layout nao khac. Layout nay at cac
thanh phan vao v tr chnh xac. Vi layout nay, cac thanh phan khong can co cung kch
thc. No tng t nh GridLayout manager, khi cac thanh phan c xap xep trong li
theo dong va cot. Tuy nhien, th t at cac thanh phan khong theo nguyen tac t trai sang
phai va t tren xuong di.

GridBagLayout gb=new GridBagLayout()
ContainerName.setLayout(gb);

e s dung layout nay, ban can cung cap thong tin ve kch thc va layout cua moi thanh
phan. Lp GridBagLayoutConstraints nam gi tat ca cac thong tin ma lp GridLayout
can e bo tr va nh kch thc moi thanh phan. Bang sau liet ke danh sach cac bien thanh
vien cua lp GridBagConstraints:

Cac bien thanh vien Muc ch
weightx, weighty Ch ra s phan phoi cua khoang trong trong
GridBagLayout. Gia tr mac nh cho cac bien
nay la 0.
gridwidth, gridheight Ch ra so lng cac o (cell) bat ngang hay i
xuong trong vung hien th cua mot thanh phan.
ipadx, ipady Ch ra lng lam thay oi chieu cao va chieu
25
rong toi thieu cua thanh phan. No se them
2*ipadx vao chieu rong toi thieu va 2*ipady
vao chieu cao toi thieu cua thanh phan. Gia tr
mac nh cho ca hai la 0.
Anchor Ch ra cach xap xep cac thanh phan trong cell.
Mac nh se at vao gia cell. Cac thanh vien
d lieu tnh sau ay co the c s dung:
GridBagConstraints.NORTH
GridBagConstraints.EAST
GridBagConstraints.WEST
GridBagConstraints.SOUTH
GridBagConstraints.NORTHEAST
GridBagConstraints.SOUTHEAST
gridx, gridy Ch ra cell can at mot thanh phan. Khi thiet
lap gia tr cua gridx la
GridbagConstraints.RELATIVE th thanh
phan c them se nam v tr ben phai cua
thanh phan cuoi cung.
Fill Ch ra cach ma mot thanh phan c bo tr
vao cell the nao neu nh cell ln hn thanh
phan. Mac nh kch thc thanh phan luc o
khong thay oi.

Bang 5.4 Cac bien thanh vien cua lp GridBagConstraints

Bang sau ay cung cap mot danh sach cac bien d lieu tnh la cac gia tr cho bien fill:

Gia tr Mo ta
GridBagConstraints.NONE Mac nh, khong lam thay oi kch thc cua
thanh phan.
GridBagConstraints. Tang chieu rong cua thanh phan theo chieu
ngang (HORIZONTAL) e lam cho thanh
phan khp vi vun
GridBagConstraints.
GridBagConstraints.BOTH
Insets

Bang 5.5 Cac bien thanh vien d lieu tnh cua bien fill

26
S dung phng thc setConstraints() e thiet lap cac hang so cho moi thanh phan. Cho
v du:

gblay.setConstraints(lb1, gbc);

gblay la oi tng cua lp GridBagLayout, lbl la thanh phan Label va gbc la oi
tng cua lp GridBagConstraints.

Chng trnh 5.12 minh hoa mot v du cua GridBagLayout va GridBagConstraints.

Chng trnh 5.12

import java.awt.*;
class Gbltest extends Frame
{
TextArea ta;
TextField tf;
Button b1,b2;
CheckboxGroup cbg;
Checkbox cb1,cb2,cb3,cb4;
GridBagLayout gb;
GridBagConstraints gbc;
public GBltest(String title)
{
super(title);
gb=new GridBagLayout();
setLayout(gb);
gbc=new GridBagConstraints();
ta=new TextArea(Textarea,5,10);
tf=new TextField(enter your name);
b1=new Button(TextArea);
b2=new Button(TextField);

cbg=new CheckboxGroup();
cb1=new Checkbox(Bold, cbg,false);
cb2=new Checkbox(Italic, cbg,false);
cb3=new Checkbox(Plain, cbg,false);
cb4=new Checkbox(Bold/Italic, cbg,true);

gbc.fill=GridBagConstraints.BOTH;
addComponent(ta,0,0,4,1);
27

gbc.fill=GridBagConstraints.HORIZONTAL;
addComponent(b1,0,1,1,1);

gbc.fill=GridBagConstraints.HORIZONTAL;
addComponent(b2,0,2,1,1);

gbc.fill=GridBagConstraints.HORIZONTAL;
addComponent(cb1,2,1,1,1);

gbc.fill=GridBagConstraints.HORIZONTAL;
addComponent(cb2,2,2,1,1);

gbc.fill=GridBagConstraints.HORIZONTAL;
addComponent(cb3,3,1,1,1);

gbc.fill=GridBagConstraints.HORIZONTAL;
addComponent(cb4,3,2,1,1);

gbc.fill=GridBagConstraints.HORIZONTAL;
addComponent(tf,4,0,1,3);
}

public void addComponent(Component c, int row, int col, int nrow, int ncol)
{
gbc.gridx=col;
gbc.gridy=row;

gbc.gridwidth=ncol;
gbc.gridheight=ncol;

gb.setConstraints(c,gbc);
add(c);
}
public static void main(String args[])
{
Gbltest t=new Gbltest(GridBag Layout);
t.setSize(300,200);
t.show();
}
}
28

Khi mot container b thay oi kch thc va khi khoang trang phu ton tai, cac thanh phan
co chieu rong ln hn se chiem gi nhieu khoang trong hn la cac thanh phan co gia tr ve
chieu rong nho hn.

Ket xuat cua chng trnh c ch ra hnh 5.15



Hnh 5.15 GridBagLayout

Giai thch oan ma tren:

gbc.fill=GridBagConstraints.BOTH;

Thanh vien fill cua lp GridBagConstraints ch ra thanh phan co the c m rong theo
hng nam ngang va thang ng. Cu phap sau mo ta thanh phan ch c m rong theo
hng nam ngang:

gbc.fill=GridBagConstraints.HORIZNTAL;

Cu phap sau se them vao thanh phan TextArea vi so dong va so cot can chiem:

addComponent(ta,0,2,4,1);

0 Khi au t dong th 0
2 Khi au t dong th 2
4 ta chiem gi 4 dong
1 ta chiem 1 cot

S dung cu phap sau e bo tr cac thanh phan vao trong dong va cot nao o:

29
gbc.gridx=col;
gbc.gridy=row;

ay (gridx,gridy) la cot va dong ni ma thanh phan co the c at vao.

S dung cu phap sau e ch ra so lng cac cot va dong ma cac thanh phan co the chiem
gi:

gbc.gridwitdh=ncol;
gbc.gridheight=nrow;

ay, gridwidth xac nh so lng cac cot ma mot thanh phan chiem gi va gridheight xac
nh so lng cac dong ma mot thanh phan chiem gi.

Khi mot container b thay oi kch thc va khi khoang trang phu ton tai, cac thanh phan
co chieu rong ln hn se chiem gi nhieu khoang trong hn la cac thanh phan co gia tr ve
chieu rong nho hn.

5.5 X ly cac s kien

Cac he thong GUI x ly cac tng tac ngi dung vi s tr giup cua mo hnh event-
driven. Tng tac cua ngi dung co the la di chuyen chuot, nhan phm, nha phm v.vTat
ca cac thao tac nay thiet lap mot s kien cua mot vai kieu nao o.

Viec x ly nhng s kien nay phu thuoc vao ng dung. Abstract Windowing Toolkit
(AWT) x ly mot vai s kien. Moi trng ma cac ng dung nay c thi hanh v du nh
trnh duyet cung co the x ly cac ieu khien khac. Ngi lap trnh vien can phai viet mot
ham x ly s kien.

ng dung can ang ky mot ham x ly s kien vi mot oi tng. Ham x ly s kien nay se
c goi bat c khi nao s kien tng ng phat sinh. JDK1.2 lam viec theo mo hnh x ly
s kien nay.

Trong tien trnh nay, ng dung cho phep ban ang ky cac handler, hay goi la listener vi
cac oi tng. Nhng handler nay t ong c goi khi mot s kien thch hp phat sinh.

Mot Event Listener lang nghe mot s kien nao o ma mot oi tng thiet lap. Ngha la se
luan phien goi phng thc x ly s kien. Moi event listener cung cap cac phng thc x
ly nhng s kien nay. Lp thi hanh listener can phai nh ngha nhng phng thc nay. e
s dung mo hnh nay, ban lam theo cac bc sau:

30
Thc hien giao dien listener thch hp. Cau truc nh sau:

public class MyApp extends Frame implements ActionListener

Xac nh tat ca cac thanh phan tao ra s kien. Cac thanh phan co the la cac button,
label, menu item, hay window.

Cho v du, e ang ky mot thanh phan vi listener, ta co the s dung:

exitbtn.addActionListener(This);

Xac nh tat ca cac s kien c x ly. Cac s kien co the la mot ActionEvent neu
mot button c click hay mot mouseEvent neu nh chuot c keo i.

Thi hanh cac phng thc cua listener va viet ham x ly s kien tng ng vi cac
phng thc.

Bang sau ay ch ra cac s kien khac nhau va mo ta ve chung:

Lp s kien Mo ta
ActionEvent Phat sinh khi mot button c nhan, mot
item trong danh sach chon la c nhap oi
hay mot menu c chon.
AdjustmentEvent Phat sinh khi mot thanh scrollbar c s
dung.
ComponentEvent Phat sinh khi mot thanh phan c thay oi
kch thc, c di chuyen, b an hay lam
cho hoat ong c.
FocusEvent Phat sinh khi mot thanh phan mat hay nhan
focus t ban phm.
ItemEvent Phat sinh khi mot menu item c chon hay
bo chon; hay khi mot checkbox hay mot
item trong danh sach c click.
WindowEvent Phat sinh khi mot ca so c kch hoat,
c ong, c m hay thoat.
TextEvent Phat sinh khi gia tr trong thanh phan text
field hay text area b thay oi.
MouseEvent Phat sinh khi chuot di chuyen, c click,
c keo hay b tha ra.
KeyEvent Phat sinh khi input c nhan t ban phm.
31

Cac giao dien c thi hanh e x ly mot trong so nhng s kien nay la:

ActionListener
AdjustmentListener
ComponentListener
FocusListener
ItemListener
WindowListener
TextListener
MouseListener
MouseMotionListener
KeyListener

Cac giao dien nh ngha mot so phng thc e x ly moi s kien. Nhng phng thc nay
se c nap chong trong lp ma thi hanh nhng giao dien nay.

Chng trnh sau ay s dung mot ActionListener e x ly cac s kien lien quan vi mot
button. ActionEvent co hai phng thc:
getSource(): e tra ve nguon cua s kien.
toString(): e tra ve chuoi tng ng vi s kien.

Chng trnh 5.13 trnh bay cach tnh gap oi cua mot so c nhap vao. Chng trnh nay
c thc hien bang cach ket hp cac phng thc cua lp, ngha la cac phng thc x ly
s kien va giao dien. Viec click tren mot button se lam khi ong ActionEvent va goi
phng thc actionPerformed(). No se kiem tra button c click vi s tr giup cua ham
getSource va tra ve ket qua thch hp.

Chng trnh 5.13

import java.awt.*;
import java.awt.event.*;
class evttest extends Frame implements ActionListener
{
Label lab=new Label(Enter a number);
TextField tf1=new TextField(5);
TextField tf2=new TextField(5);
Button btnResult=new Button(Double is);
Button ext=new Button(exit);
public evttest(String title)
{
32
super(title);
setLayout(new FlowLayout());
btnResult.addActionListener(this);
ext.addActionListener(this);
add(lab);
add(tf1);
add(btnResult);
add(tf2);
add(ext);
}
public void actionPerformed(ActionEvent ae)
{
if (ae.getSource()==btnResult)
{
int num=Integer.parseInt(tf1.getText())*2;
tf2.setText(String.valueOf(num));
}
if (ae.getSource()==ext)
{
System.exit(0);
}
}
public static void main(String args[])
{
evttest t=new evttest(Event handling);
t.setSize(300,200);
t.show();
}
}

Ket xuat cua chng trnh c ch ra hnh ben di:

33


Hnh 5.16 X ly s kien

Hnh 5.17 ch ra mot phan cua cay phan cap cac lp cua goi event.

ActionEvent AdjustmentEvent ComponentEvent
ContainerEvent InputEvent FocusEvent
Object
java.util.EventObject
Java.awt.Event
ItemEvent
WindowEvent
KeyEvent MouseEvent


Hnh 5.17 Goi Event

Hnh sau ch ra th t phan cap cac giao dien cua cac event listener.

34
ActionListener
AdjustmentListener
ContainerListener
FocusListener
ItemListener
KeyListener
MouseListener
MouseMotionListener
TextListener
WindowListener
E
v
e
n
t
L
i
s
t
e
n
e
r


Hnh 5.18 Event Listener

Hnh sau la danh sach cac listener c s dung cho cac thanh phan ch ra.

Button
List
MenuItem
TextField
ActionListener


Hnh 5.19 Action Listener

35
Choice
Checkbox
List
ItemListener


Hnh 5.20 Item Listener

Dialog
Frame
WindowListener


Hnh 5.21 Window Listener

Cac listener cho lp Component c ch ra hnh 5.22:

ComponentListener
FocusListener
KeyListener
MouseMotionLIstener
Component
MouseListener


Hnh 5.22 Cac Component

5.6 Thc n (menu)

Ngon ng Java co mot tap hp cac lp oi tng e tao cac menu. Co hai loai menu pull
down va pop-up. Menu lam cho ng dung ta xay dng de s dung hn. Ch duy nhat mot
thanh menubar c at trong mot frame. Menubar la mot thanh nam ngang c at tai
36
nh cua frame. No liet ke cac muc c chon khac nhau hay menu. Mot menu oc lap co
the cha cac muc chon con, cac muc con nay c goi la menuitem. Java cung cap cac
checkbox menuitem, chung co the c bat hay m, phu thuoc vao trang thai. Hnh 5.14
minh hoa cach s dung cua menubar, menu, menuItem, va CheckboxMenuItem.

Chng trnh 5.14

import java.awt.*;
import java.awt.event.*;
class MyFrame extends Frame implements ActionListener, MouseListener
{
MenuItem exitItem;
PopupMenu optionsMenu;
Frame frame;
public MyFrame()
{
setTitle("Menu Example");
setSize(300,200);

MenuBar mbar=new MenuBar();
setMenuBar(mbar);

Menu fileMenu=new Menu("File");
mbar.add(fileMenu);
fileMenu.addActionListener(this);
MenuItem newItem=new MenuItem("New");
fileMenu.add(newItem);
MenuItem openItem=new MenuItem("Open");
fileMenu.add(openItem);
fileMenu.addSeparator();
MenuItem saveItem=new MenuItem("Save");
fileMenu.add(saveItem);
MenuItem saveAsItem=new MenuItem("Save As");
fileMenu.add(saveAsItem);
fileMenu.addSeparator();
exitItem=new MenuItem("Exit");
fileMenu.add(exitItem);
saveAsItem.addActionListener(this);

Menu editMenu=new Menu("Edit");
mbar.add(editMenu);
37
editMenu.addActionListener(this);
MenuItem cutItem=new MenuItem("Cut");
editMenu.add(cutItem);
MenuItem copyItem=new MenuItem("Copy");
editMenu.add(copyItem);
MenuItem pasteItem=new MenuItem("Paste");
editMenu.add(pasteItem);
editMenu.addSeparator();

Menu helpMenu=new Menu("Help");
mbar.add(helpMenu);
helpMenu.addActionListener(this);
MenuItem contentItem=new MenuItem("Content");
helpMenu.add(contentItem);
MenuItem indexItem=new MenuItem("Index");
helpMenu.add(indexItem);
Menu findMenu=new Menu("Find");
helpMenu.add(findMenu);
addMouseListener(this);
MenuItem nameItem=new MenuItem("Search by Name");
findMenu.add(nameItem);
MenuItem cacheItem=new MenuItem("Search from cache");
findMenu.add(cacheItem);
optionsMenu=new PopupMenu("Options");
editMenu.add(optionsMenu);
optionsMenu.addActionListener(this);
MenuItem readItem=new MenuItem("Read Only");
optionsMenu.add(readItem);
optionsMenu.addSeparator();
Menu formatMenu=new Menu("Format text");
optionsMenu.add(formatMenu);
this.add(optionsMenu);
formatMenu.addActionListener(this);
CheckboxMenuItem insertItem=new CheckboxMenuItem("Insert",true);
formatMenu.add(insertItem);
CheckboxMenuIte overtypeItem=new CheckboxMenuItem("Overtype",false);
formatMenu.add(overtypeItem);
}
public void actionPerformed(ActionEvent ae)
{
if (ae.getActionCommand().equals("Exit"))
38
{
System.exit(0);
}
}
public void mouseEntered(MouseEvent m){}
public void mouseExited(MouseEvent m){}
public void mouseClicked(MouseEvent m)
{
optionsMenu.show(this,m.getX(),m.getY());
}
public void mouseReleased(MouseEvent m){}
public void mousePressed(MouseEvent m){}
public static void main(String[] args)
{
MyFrame frame=new MyFrame();
frame.show();
}
}

Khi ban thc thi chng trnh tren, mot man hnh vi cac trnh n File, Edit va Help c
hien th. Khi ban click vao muc File, ban se thay ket xuat sau ay:



Hnh 5.23 Pull-down Menu

Mot menu co the cha cac menu con. Khi ban click vao trnh n Help, 3 muc con co ten
la Content, Index va Find se xuat hien. Trong trnh n Find, co 2 muc con la Search by
name va Search from Cache. Mat khac mot pop-up menu se hien ra neu ban nhan chuot
phai tren man hnh:

39



Hnh 5.24 Pop-up menu

Cac muc chon c trnh bay tren pop-up menu la Read-Only va Format text. Muc Format
text co 2 muc con la Insert va Overtype. Nhng muc chon con nay thuoc kieu
Checkboxmenuitem. Khi ban click vao muc chon, no se c anh dau va ban co the thay
dau chon tng ng tren muc c chon o. Ngon ng Java cung cap cac lp khac nhau.
Nhng lp nay c s dung e tao thanh Menubar, Menu, MenuItem va
Checkboxmenuitem trong chng trnh.

Tom tat

GUI giup chung ta tao giao dien hnh anh cho mot ng dung. Mat khac no cung giup ta
phat trien cac ng dung ngi dung nhieu hieu qua hn.

Thanh phan GUI la mot oi tng trc quan. Ngi dung co the s dung chuot hay ban
phm e tng tac vi oi tng nay.

Cac thanh phan GUI nh cac button, label, checkbox va radio button ma c s dung
trong ng dung hay applet th co the c thay tren man hnh. Bat c thao tac nao ma lien
quan ti tat ca cac thanh phan GUI eu c tm thay trong lp Component. Ta can s
dung cac lp ton tai trong goi java.awt e tao cac thanh phan GUI nay.

He thong GUI x ly tat ca cac tng tac cua ngi dung vi s ho tr cua mo hnh
event-driven. Mot s kien c kch hoat khi ngi s dung tao mot hanh ong nh la di
chuyen chuot, nhan phm, nha phm v.v.

Cac kieu trnh bay khac nhau:

40
Flowlayout
BorderLayout
CardLayout
GridLayout
GridBagLayout

Phng thc setLayout() c s dung e tao mot layout.

Flowlayout la Layout Manager mac nh cho cac applet va cac panel. Cac thanh phan
c xap xep t goc trai tren en goc phai ben di cua man hnh.

Borderlayout xap xep cac thanh phan trong North, South, East, West va Center
cua mot container.

Gridlayout at cac thanh phan trong cac dong va cac cot. Tat ca cac thanh phan eu co
cung kch thc.

Cardlayout at cac thanh phan tren nh cua cac thanh phan khac. No tao mot stack cua
mot so thanh phan, thng thng la cac panel.

Gridlayout bo tr cac thanh phan mot cach chnh xac hn layout manager. No tng t
nh grid layout. S khac nhau duy nhat ay la thanh phan khong can co cung kch thc
va co the c at trong bat ky dong hay cot nao.

Trong mo hnh x ly s kien, ng dung cho phep ban ang ky cac handler c goi la
cac listener cho cac oi tng.

Mot Event Listener lang nghe mot s kien ac biet nao o ma mot oi tng thiet lap.
No se goi lan lt cac phng thc x ly s kien. Lp layout manager cung cap mot
phng tien e ieu khien cach trnh bay vat ly cua cac thanh phan GUI.

Co hai kieu menu pull-down va pop-up.

You might also like