Trang 120
Chng 6: LP TRÌNH HO AWT
Mt kh nng ca Java là cho phép ta xây dng các ng dng có giao din ho
hay còn gi là GUI (Grapthical User Interface). Khi Java c phát hành, các thành phn
hoc tp trung vào th vin mang tên Abstract Window Toolkit (AWT). i vi
i h nn, thành phn AWT sc ánh x sang mt thành phn nn c th, bng cách s
ng trc tip mã native ca h nn, chính vì vy nó ph thuc rt nhiu vào h nn và nó
còn gây li trên mt s h nn. Vi bn phát hành Java 2, các thành phn giao din c
thay bng tp hp các thành phn linh hot, a nng, mnh m, c lp vi h nn thuc
th vin Swing. Phn ln các thành phn trong th vin Swing u c tô v trc tip
trên canvas bng mã lnh ca Java, ngoi tr các thành phn là lp con ca lp
java.awt.Window hoc Java.awt.Panel vn phi c v bng GUI trên nn c th. Thành
phn Swing ít ph thuc vào h nn hn do vy ít gp li hn và c bit nó s dng ít tài
nguyên ca h thng hn các thành phn trong th vin awt. Mc dù các thành phn awt
n c h tr trong Java 2 nhng, tuy nhiên Sun khuyên bn nên s dng các thành phn
Swing thay cho các thành phn awt, tuy nhiên các thành phn trong th vin Swing không
th thay tt c các thành phn trong th vin awt. Chúng ch thay th mt phn ca awt
nh: Button, Panel, TextFeild, v.v. Còn các lp tr giúp khác trong awt nh : Graphics,
Color, Font, FontMetrics, v.v. vn không thay i. Bên cnh ó các thành phn Swing còn
dng mô hình s lý s kin ca awt.
I. Gii thiu v h thng ho ca Java
1. Gii thiu chung
Thit k API cho lp trình ho ca Java là mt ví d hoàn ho v cách dùng lp, s
tha và giao din. API cho lp trình ho bao gm mt tp rt nhiu lp nhm tr giúp
xây dng các thành phn giao din khác nhau nh: ca s,nút n, ô vn bn, menu, hp
kim, v.v. Mi quan h k tha gia các thành phn này c mô t trong hình sau:
Componient ây là lp (tru tng) cha ca mi lp giao din ngi dùng. Lp này
cung cp các thuc tính, hành vi c bn nht ca tt c các thành phn giao din.
Container Là mt vt cha dùng ghép nhóm các thành phn giao din khác. Mi
t cha có mt lp qun lý hin th, lp qun lý hin th có trách nhim b trí cách
thc hin th các thành phn bên trong. Hai vt cha hay c s dng nht la
Dialog
JComponent
JApplet
JFrame
JDialog
Các thành phn
khác trong gói
javax.swing c k
tha t JComponent
LayoutManage
r
BorderLayout
FlowLayout
GridLayout
CardLayout
GridBagLayout
Trang 122
t lp c k tha t lp JComponent c th hin trong hình sau:
2. Mt s phng thc ca lp Component
p Component cung cp các thuc tính, phng thc chung cho các lp con ca
nó. Sau ây là mt s phng thc ca lp Component :
- Dimension getSize(): cho li i tng thuc lp Dimension gm width (chiu rng),
height (chiu cao) xác nh kích thc ca mt thành phn tính theo pixel.
- void setSize(int width, int height) và void setSize(Dimension d) t li kích thc ca
thành phn.
- Point getLocation(): cho li ta (kiu Point) trên cùng bên trái (ta gc) ca thành
phn ang xét.
JComponent
JTextComponent
AbstracButton JMenuItem JCheckBoxMen
- Rectangle getBounds(): cho li ng biên là hình ch nht Rectangle bao gm ta
c và chiu dài, chiu rng ca hình ch nht.
- void setBounds(int x, int y) và void setBounds(Rectangle r):t li ng biên cho mt
thành phn.
- void setForeground(Color c):c s dng t màu v cho thành phn ha
- void setBackground(Color c):t màu nn cho thành phn ha. Các tham s ca hai
hàm này là i tng ca lp Color sc gii thiu phn sau.
- Font getFont():c s dng bit c font ca các chang x lý trong thành
phn ha.
- void setFont(Font f):t li font ch cho mt thành phn.
- void setEnabled(boolean b):u i s b ca hàm getEnabled() là true thì thành phn
ang xét hot ng bình thng, ngha là có kh nng kích hot (enable), có th tr li các
yêu cu ca ngi s dng và sinh ra các s kin nh mong mun. Ngc li, nu là false
thì thành phn tng ng s không kích hot c, ngha là không th tr li c các yêu
u ca ngi s dng.
- Lu ý: Tt c các thành phn giao din khi khi to u c kích hot
- void setVisible(boolean b):t thành phn ha có thc hin th lên màn hình
(nhìn thy c) hoc b che giu tùy thuc vào i s ca hàm setVisible() là true hay
false.
3. Lp Container
p Container là lp con ca lp tru tng Component. Các lp cha (lp con ca
Container) cung cp tt c các chc nng xây dng các giao din ha ng dng, trong
ó có phng thc add() c np chng dùng b sung mt thành phn vào vt cha và
phng thc remove() cng c np chng g b mt thành phn ra khi vt cha.
4. To ra Frame
p JFrame là lp con ca lp Frame (Frame là lp con ca lp Window) c s
ng to ra nhng ca s cho các giao din ng dng GUI.
ch bn chung to ra mt ca s là:
- o ra mt frame có tiêu gì ó, ví d “My Frame” :
JFrame myWindow= new JFrame(“My Frame”);
GridBagLayout Cho phép t các thành phn giao din vào li hình ch nht,
nhng mt thành phn có th chim nhiu nhiu hn mt ô.
null Các thành phn bên trong vt cha không c sp li khi kích
thc ca vt cha thay i.
Các phng pháp thit t layout
ly v layout hay t li layout cho vt cha, chúng ta có th s dng hai phng
thc ca lp Container:
LayoutManager getLayout();
void setLayout(LayoutManager mgr);
Các thành phn giao din sau khi ã c to ra thì phi c a vào mt phn t cha
nào ó. Hàm add() ca lp Container c np chng thc hin nhim va các
thành phn vào phn t cha.
Component add(Component comp)
Component add(Component comp, int index)
Cmponent add(Component comp, Object constraints)
Cmponent add(Component comp, Object constraints, int index)
Trong ó, i s index c s dng ch ra v trí ca ô cn t thành phn giao din
comp vào. i s constraints xác nh các hng a comp vào phn t cha.
Ngc li, khi cn loi ra khi phn t cha mt thành phn giao din thì s dng các hàm
sau:
void remove(int index)
Trang 125
void remove(Component comp)
void removeAll()
1. Lp FlowLayout
Lp FlowLayout cung cp các hàm to lp sp hàng các thành phn giao din:
FlowLayout()
FlowLayout(int aligment)
FlowLayout(int aligment, int horizongap, int verticalgap)
public static final int LEFT
Các ng dng vi GUI thng c hng dn bi các s kin (event). Vic nhn
t nút, m, óng các Window hay gõ các ký t t bàn phím, v.v. u to ra các s kin
(event) và c gi ti cho chng trình ng dng. Trong Java các s kin c th hin
ng các i tng. Lp c s nht, lp cha ca tt c các lp con ca các s kin là lp
java.util.EventObject.
Trang 126
Hình H7-20 Các lp x lý các s kin
Các lp con ca AWTEvent c chia thành hai nhóm:
Các lp mô t v ng ngha ca các s kin,
Các lp s kin mc thp.
1. Ý ngha ca các lp
a. ActionEvent
kin này c phát sinh bi nhng hot thc hin trên các thành phn ca GUI. Các
thành phn gây ra các s kin hành ng bao gm:
- JButton - khi mt nút button c khích hot,
- JList - khi mt mc trong danh sách c kích hot úp,
- JmenuItem, JcheckBoxMenu, JradioMenu - khi mt mc trong thc n c chn,
- JTextField - khi gõ phím ENTER trong trng vn bn (text).
b. AdjustmentEvent
kin này xy ra khi ta u chnh (adjustment) giá tr thanh cun (JScollBar)
Scrollbar - khi thc hin mt ln cn chnh trong thanh trt Scrollbar.
p này có phng thc int getValue(): cho li giá tr hin thi c xác nh bi ln cn
chnh sau cùng.
c. ItemEvent
Các thành phn ca GUI gây ra các s kin v các mc gm có:
java.lang.Object
java.util.EventObject
java.awt.event
ActionEvent AdjustmentEvent
ComponentEven
(Container).
g. FocusEvent
kin loi này xut hin khi mt thành phn nhn hoc mt focus.
h. KeyEvent
Lp KeyEvent là lp con ca lp tru tng InputEvent c s dng x lý các
kin liên quan n các phím ca bàn phím. Lp này có các phng thc:
int getKeyCode()
- i vi các s kin KEY_PRESSED hoc KEY_RELEASED, hàm này c s dng
nhn li giá tr nguyên tng ng vi mã ca phím trên bàn phím.
char getKeyChar()
- i vi các s kin KEY_PRESSED, hàm này c s dng nhn li giá tr nguyên,
mã Unicode tng ng vi ký t ca bàn phím.
i. MouseEvent
p MouseEvent là lp con ca lp tru tng InputEvent c s dng x lý các tín
hiu ca chut. Lp này có các phng thc:
int getX()
int getY()
Point getPoint()
Các hàm này c s dng nhn li ta x, y ca v trí liên quan n s kin do
chut gây ra.
void translatePoint(int dx, int dy)
Hàm translate() c s dng chuyn ta ca s kin do chut gây ra n (dx,
dy).
int getClickCount()
Trang 128
Hàm getClickCount() m s ln kích chut.
j. PaintEvent
S kin này xut hin khi mt thành phn c v li, thc t s kin này xy ra khi
phng thc paint()/ update() c gi n.
k. WindowEvent
TextEvent JTextArea
JTexField
JTextPane
JEditorPane
addTexListener
removeTextListener
TextListener
ComponentEvent Component
addComponentListener
removeComponentListener
ComponentListe
ner
ContainerEvent
Container addContainerListener
removeContainerListener
ContainerListen
er
FocusEvent
Component addFocusListener
removeFocusListener
FocusListener
KeyEvent
Component addkeyListener
removeKeyListener
KeyListener
MouseEvent
Component addMouseListener MouseMotionLi