Lập trình đồ họa AWT - Pdf 62

Trang 120
Chng 6: LP TRÌNH  HO AWT
Mt kh nng ca Java là cho phép ta xây dng các ng dng có giao din  ho
hay còn gi là GUI (Grapthical User Interface). Khi Java c phát hành, các thành phn
 hoc tp trung vào th vin mang tên Abstract Window Toolkit (AWT). i vi
i h nn, thành phn AWT sc ánh x sang mt thành phn nn c th, bng cách s
ng trc tip mã native ca h nn, chính vì vy nó ph thuc rt nhiu vào h nn và nó
còn gây li trên mt s h nn. Vi bn phát hành Java 2, các thành phn giao din c
thay bng tp hp các thành phn linh hot, a nng, mnh m, c lp vi h nn thuc
th vin Swing. Phn ln các thành phn trong th vin Swing u c tô v trc tip
trên canvas bng mã lnh ca Java, ngoi tr các thành phn là lp con ca lp
java.awt.Window hoc Java.awt.Panel vn phi c v bng GUI trên nn c th. Thành
phn Swing ít ph thuc vào h nn hn do vy ít gp li hn và c bit nó s dng ít tài
nguyên ca h thng hn các thành phn trong th vin awt. Mc dù các thành phn awt
n c h tr trong Java 2 nhng, tuy nhiên Sun khuyên bn nên s dng các thành phn
Swing thay cho các thành phn awt, tuy nhiên các thành phn trong th vin Swing không
th thay tt c các thành phn trong th vin awt. Chúng ch thay th mt phn ca awt
nh: Button, Panel, TextFeild, v.v. Còn các lp tr giúp khác trong awt nh : Graphics,
Color, Font, FontMetrics, v.v. vn không thay i. Bên cnh ó các thành phn Swing còn
 dng mô hình s lý s kin ca awt.
I. Gii thiu v h thng  ho ca Java
1. Gii thiu chung
Thit k API cho lp trình  ho ca Java là mt ví d hoàn ho v cách dùng lp, s
 tha và giao din. API cho lp trình  ho bao gm mt tp rt nhiu lp nhm tr giúp
xây dng các thành phn giao din khác nhau nh: ca s,nút n, ô vn bn, menu, hp
kim, v.v. Mi quan h k tha gia các thành phn này c mô t trong hình sau:
Componient ây là lp (tru tng) cha ca mi lp giao din ngi dùng. Lp này
cung cp các thuc tính, hành vi c bn nht ca tt c các thành phn giao din.
Container Là mt vt cha dùng  ghép nhóm các thành phn giao din khác. Mi
t cha có mt lp qun lý hin th, lp qun lý hin th có trách nhim b trí cách
thc hin th các thành phn bên trong. Hai vt cha hay c s dng nht la

Dialog
JComponent
JApplet
JFrame
JDialog
Các thành phn
khác trong gói
javax.swing c k
tha t JComponent
LayoutManage
r
BorderLayout
FlowLayout
GridLayout
CardLayout
GridBagLayout
Trang 122
t lp c k tha t lp JComponent c th hin trong hình sau:
2. Mt s phng thc ca lp Component
p Component cung cp các thuc tính, phng thc chung cho các lp con ca
nó. Sau ây là mt s phng thc ca lp Component :
- Dimension getSize(): cho li i tng thuc lp Dimension gm width (chiu rng),
height (chiu cao) xác nh kích thc ca mt thành phn tính theo pixel.
- void setSize(int width, int height) và void setSize(Dimension d) t li kích thc ca
thành phn.
- Point getLocation(): cho li ta  (kiu Point) trên cùng bên trái (ta  gc) ca thành
phn ang xét.
JComponent
JTextComponent
AbstracButton JMenuItem JCheckBoxMen

- Rectangle getBounds(): cho li ng biên là hình ch nht Rectangle bao gm ta 
c và chiu dài, chiu rng ca hình ch nht.
- void setBounds(int x, int y) và void setBounds(Rectangle r):t li ng biên cho mt
thành phn.
- void setForeground(Color c):c s dng t màu v cho thành phn  ha
- void setBackground(Color c):t màu nn cho thành phn  ha. Các tham s ca hai
hàm này là i tng ca lp Color sc gii thiu  phn sau.
- Font getFont():c s dng  bit c font ca các chang x lý trong thành
phn  ha.
- void setFont(Font f):t li font ch cho mt thành phn.
- void setEnabled(boolean b):u i s b ca hàm getEnabled() là true thì thành phn
ang xét hot ng bình thng, ngha là có kh nng kích hot (enable), có th tr li các
yêu cu ca ngi s dng và sinh ra các s kin nh mong mun. Ngc li, nu là false
thì thành phn tng ng s không kích hot c, ngha là không th tr li c các yêu
u ca ngi s dng.
- Lu ý: Tt c các thành phn giao din khi khi to u c kích hot
- void setVisible(boolean b):t thành phn  ha có thc hin th lên màn hình
(nhìn thy c) hoc b che giu tùy thuc vào i s ca hàm setVisible() là true hay
false.
3. Lp Container
p Container là lp con ca lp tru tng Component. Các lp cha (lp con ca
Container) cung cp tt c các chc nng  xây dng các giao din  ha ng dng, trong
ó có phng thc add() c np chng dùng  b sung mt thành phn vào vt cha và
phng thc remove() cng c np chng  g b mt thành phn ra khi vt cha.
4. To ra Frame
p JFrame là lp con ca lp Frame (Frame là lp con ca lp Window) c s
ng  to ra nhng ca s cho các giao din ng dng GUI.
ch bn chung  to ra mt ca s là:
- o ra mt frame có tiêu  gì ó, ví d “My Frame” :
JFrame myWindow= new JFrame(“My Frame”);

GridBagLayout Cho phép t các thành phn giao din vào li hình ch nht,
nhng mt thành phn có th chim nhiu nhiu hn mt ô.
null Các thành phn bên trong vt cha không c sp li khi kích
thc ca vt cha thay i.
Các phng pháp thit t layout
 ly v layout hay t li layout cho vt cha, chúng ta có th s dng hai phng
thc ca lp Container:
LayoutManager getLayout();
void setLayout(LayoutManager mgr);
Các thành phn giao din sau khi ã c to ra thì phi c a vào mt phn t cha
nào ó. Hàm add() ca lp Container c np chng  thc hin nhim va các
thành phn vào phn t cha.
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 dng  ch ra v trí ca ô cn t thành phn giao din
comp vào. i s constraints xác nh các hng a comp vào phn t cha.
Ngc li, khi cn loi ra khi phn t cha mt thành phn giao din thì s dng các hàm
sau:
void remove(int index)
Trang 125
void remove(Component comp)
void removeAll()
1. Lp FlowLayout
Lp FlowLayout cung cp các hàm to lp  sp hàng các thành phn giao din:
FlowLayout()
FlowLayout(int aligment)
FlowLayout(int aligment, int horizongap, int verticalgap)
public static final int LEFT

Các ng dng vi GUI thng c hng dn bi các s kin (event). Vic nhn
t nút, m, óng các Window hay gõ các ký t t bàn phím, v.v. u to ra các s kin
(event) và c gi ti cho chng trình ng dng. Trong Java các s kin c th hin
ng các i tng. Lp c s nht, lp cha ca tt c các lp con ca các s kin là lp
java.util.EventObject.
Trang 126
Hình H7-20 Các lp x lý các s kin
Các lp con ca AWTEvent c chia thành hai nhóm:
Các lp mô t v ng ngha ca các s kin,
Các lp s kin  mc thp.
1. Ý ngha ca các lp
a. ActionEvent
 kin này c phát sinh bi nhng hot thc hin trên các thành phn ca GUI. Các
thành phn gây ra các s kin hành ng bao gm:
- JButton - khi mt nút button c khích hot,
- JList - khi mt mc trong danh sách c kích hot úp,
- JmenuItem, JcheckBoxMenu, JradioMenu - khi mt mc trong thc n c chn,
- JTextField - khi gõ phím ENTER trong trng vn bn (text).
b. AdjustmentEvent
 kin này xy ra khi ta u chnh (adjustment) giá tr thanh cun (JScollBar)
Scrollbar - khi thc hin mt ln cn chnh trong thanh trt Scrollbar.
p này có phng thc int getValue(): cho li giá tr hin thi c xác nh bi ln cn
chnh sau cùng.
c. ItemEvent
Các thành phn ca GUI gây ra các s kin v các mc gm có:
java.lang.Object
java.util.EventObject
java.awt.event
ActionEvent AdjustmentEvent
ComponentEven

(Container).
g. FocusEvent
 kin loi này xut hin khi mt thành phn nhn hoc mt focus.
h. KeyEvent
Lp KeyEvent là lp con ca lp tru tng InputEvent c s dng  x lý các
 kin liên quan n các phím ca bàn phím. Lp này có các phng thc:
int getKeyCode()
- i vi các s kin KEY_PRESSED hoc KEY_RELEASED, hàm này c s dng 
nhn li giá tr nguyên tng ng vi mã ca phím trên bàn phím.
char getKeyChar()
- i vi các s kin KEY_PRESSED, hàm này c s dng  nhn li giá tr nguyên,
mã Unicode tng ng vi ký t ca bàn phím.
i. MouseEvent
p MouseEvent là lp con ca lp tru tng InputEvent c s dng  x lý các tín
hiu ca chut. Lp này có các phng thc:
int getX()
int getY()
Point getPoint()
Các hàm này c s dng  nhn li ta  x, y ca v trí liên quan n s kin do
chut gây ra.
void translatePoint(int dx, int dy)
Hàm translate() c s dng  chuyn ta  ca s kin do chut gây ra n (dx,
dy).
int getClickCount()
Trang 128
Hàm getClickCount() m s ln kích chut.
j. PaintEvent
S kin này xut hin khi mt thành phn c v li, thc t s kin này xy ra khi
phng thc paint()/ update() c gi 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


Nhờ tải bản gốc
Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status