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
JFrame và JPanel.
Jcomponient Là lp cha ca mi thành phn Swing ligth weight, c v trc tip
lên canvas bng mã lnh Java.
Window c s dng to ra mt ca s, Thông thng ta hay s dng hai lp
con ca nó là JFrame và JDialog.
JFrame là ca s không lng bên trong ca s khác.
JDialog là mt ca sc hin th di dng modal.
JAplet là lp cha ca mi lp ng dng aplet.
JPanel là mt vt cha, lu gi các thành phn giao din ngi dùng.
Graphics là lp tru tng cung cp ng cnh ho v các i tng ho
nh: ng thng, ng tròn, hình nh…
Trang 121
Color lp này biu din mt mu sc.
Font lp này biu th cho mt font ho.
FontMetrics là mt lp tru tng dùng xác nh các thuc tính ca Font.
t c các thành phn ho trong th vin Swing c nhóm trong gói javax.swing. a
các thành phn trong th vin Swing u có tip u ng là ‘J’, Ví d mt nút lnh trong
th vin Swing có tên là JButton, mt memu có tên là JMenu.
Tt c nhng lp khác c lit kê trong hình di ây
Chú ý: ng pha trn các thành phn giao din swing và awt trong cùng mt ng dng.
Chng hn nh ng nên t mt JButton vào mt Panel và ng nên t Button vào
JPanel. Vic làm này có th gây li.
Object
AWTEvent
Font
FontMetric
Color
Grapthics
Componient Container Panel Applet
Window Frame
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
JtoggleButton
JMenu
JRadioMenu
JButton
JEditorPane
JTextField
JTextArea
JPasswordField
JTextPane
JCheckBox
JRadioButto
JLabel
JList
JCompoBox JMenuBar
JOptionPane JScrollBar JCcollPane
JFileChooser
JPopupMenu JSeparator JSlider
JTabbedPane
JRootPaneJPane
JprogressBar
JToolBar
JSplitBar
JTable
JTree
JColorChooser
JInternalFrame
JToolTip JtableHeader JLayeredPane
Trang 123
- void setLocation(int x, int y) và void setLocation(Point p):t li các ta c ch
nh cho mt thành phn.
- 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”);
- Xây dng mt cu trúc phân cp các thành phn bng cách s dng hàm
myWindow.getContentPane().add() b sung thêm JPanel hoc nhng thành phn
giao din khác vào Frame:
Ví d: myWindow.getContentPane().add(new JButton(“OK”));// a vào mt nút
(JButton) có tên “OK” vào frame
- t li kích thc cho frame s dng hàm setSize():
myWindow.setSize(200, 300);// t li khung frame là 200 ( 300
- Gói khung frame ó li bng hàm pack():
myWindow.pack();
- Cho hin frame:
myWindow.setVisible(true);
Trang 124
II. Trình qun lý hin th trong Java
Khi thit k giao din ha cho mt ng dng, chúng ta phi quan tâm n kích
thc và cách b trí (layout) các thành phn giao din nh: JButton, JCheckbox,
JTextField, v.v. sao cho tin li nht i vi ngi s dng. Java có các lp m nhim
nhng công vic trên và qun lý các thành phn giao din GUI bên trong các vt cha.
ng sau cung cp bn lp qun lý layout (cách b trí và sp xp) các thành phn GUI.
Tên lp Mô t
FlowLayout Xp các thành phn giao din trc tiên theo hàng t trái qua phi,
sau ó theo ct t trên xung di. Cách sp xp này là mc nh
i vi Panel, JPanel ,Applet và JApplet.
GridLayout Các thành phn giao din c sp xp trong các ô li hình ch
nht ln lt theo hàng t trái qua phi và theo ct t trên xung
i trong mt phn t cha. Mi thành phn giao din cha trong
t ô.
BorderLayout Các thành phn giao din (ít hn 5) c t vào các v trí theo các
ng: north (bc), south (nam), west (tây), east (ông) và center
(trung tâm)). Cách sp xp này là mc nhi vi lp Window,
Frame, Jframe, Dialog và JDialog.
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
public static final int CENTER
public static final int RIGHT
i s aligment xác nh cách sp theo hàng: t trái, phi hay trung tâm,
horizongap và verticalgap là khong cách tính theo pixel gia các hàng các ct.
Trng hp mc nh thì khong cách gia các hàng, ct là 5 pixel.
2. Lp GridLayout
p GridLayout cung cp các hàm to lp sp hàng các thành phn giao din:
GridLayout()
GridLayout(int rows, int columns)
GridLayout(int rows, int columns, int hoiongap, int verticalgap)
To ra mt li hình ch nht có rows ( columns ô có khong cách gia các hàng
các ct là horizongap, verticalgap. Mt trong hai i s rows hoc columns có th là
0, nhng không th c hai, GridLayout(1,0) là to ra li có mt hàng.
3.Lp BorderLayout
p BorderLayout cho phép t mt thành phn giao din vào mt trong bn hng: c
(NORTH), nam (SOUTH), ông (EAST), tây (WEST) và gia (CENTER).
BorderLayout()
BorderLayout(int horizongap, int verticalgap)
To ra mt layout mc nh hoc có khong cách gia các thành phn (tính bng
pixel) là horizongap theo hàng và verticalgap theo ct.
Component add(Component comp)
void add(Component comp, Object constraint)
public static final String NORTH
public static final String SOUTH
public static final String EAST
public static final String WEST
public static final String CENTER
Trng hp mc nh là CENTER, ngc li, có th chnh hng t các thành
phn comp vào phn t cha theo constraint là mt trong các hng trên.
III. X lý s kin trong Java
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
t
ItemEvent TextEvent
ContainerEvent FocusEvent
InputEvent
PaintEvent
WindowEvent
KeyEvent
MouseEven
t
java.awt.AWTEvent
Trang 127
- JCheckbox - khi trng thái ca hp kim tra Checkbox thay i.
- CheckboxMenuItem - khi trng thái ca hp kim tra Checkbox ng vi mc ca
thc n thay i.
- JRadioButton- khi trng thái ca hp chn (Option) thay i.
- JList - khi mt mc trong danh sách c chn hoc b loi b chn.
- JCompoBox - khi mt mc trong danh sách c chn hoc b loi b chn.
p ItemEvent có phng thc Object getItem(): Cho li i tng c chn hay va b
chn.
d. TextEvent
Các thành phn ca GUI gây ra các s kin v text gm có:
TextArea - khi kt thúc bng nhn nút ENTER,
TextField - khi kt thúc bng nhn nút ENTER.
e. ComponentEvent
kin này xut hin khi mt thành phn bn i/hin ra hoc thay thay i li kích thc.
p ComponentEvent có phng thc:
Component getComponent()
Cho li i tng tham chiu kiu Component.
f. ContainerEvent
kin này xut hin khi mt thành phn c b sung hay b loi b khi vt cha
(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
S kin loi này xut hin khi thao tác vi các Window, chng hn nh: óng,
phóng to, thu nh.. mt ca s. Lp này có phng thc:
Window getWindow()
Hàm này cho li i tng ca lp Window ng vi s kin liên quan n Window
ã xy ra.
Kiu s kin Ngun gây ra s kin Phng thc ang ký, gõ b
i tng lng nghe
Giao din
Listener lng
nghe tng ng
AcitionEvent
JButton
JList
TexField
addComponentlistener
removeActiontListener
AcitionListener
AdjustmentEvent
JScrollbar addAdjustmentListener
removeAdjustmentListener
AdjustmentListe
ner
ItemEvent JCheckbox
JCheckboxMenuItem
JRadioButton
JList
JCompoBox
addItemListener
removeItemListener
ItemListener
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