Tải bản đầy đủ (.pdf) (23 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (495.07 KB, 23 trang )

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


JFrame và JPanel.
Jcomponient Là lp cha ca mi thành phn Swing ligth weight, c v trc tip
lên canvas bng mã lnh Java.
Window c s dng  to ra mt ca s, Thông thng ta hay s dng hai lp
con ca nó là JFrame và JDialog.
JFrame là ca s không lng bên trong ca s khác.
JDialog là mt ca sc hin th di dng modal.
JAplet là lp cha ca mi lp ng dng aplet.
JPanel là mt vt cha, lu gi các thành phn giao din ngi dùng.
Graphics là lp tru tng cung cp ng cnh  ho v các i tng  ho
nh: ng thng, ng tròn, hình nh…
Trang 121
Color lp này biu din mt mu sc.
Font lp này biu th cho mt font  ho.
FontMetrics là mt lp tru tng dùng  xác nh các thuc tính ca Font.
t c các thành phn  ho trong th vin Swing c nhóm trong gói javax.swing. a
 các thành phn trong th vin Swing u có tip u ng là ‘J’, Ví d mt nút lnh trong
th vin Swing có tên là JButton, mt memu có tên là JMenu.
Tt c nhng lp khác c lit kê trong hình di ây
Chú ý: ng pha trn các thành phn giao din swing và awt trong cùng mt ng dng.
Chng hn nh ng nên t mt JButton vào mt Panel và ng nên t Button vào
JPanel. Vic làm này có th gây li.
Object
AWTEvent
Font
FontMetric
Color
Grapthics
Componient Container Panel Applet
Window Frame

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

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 li các ta c ch
nh cho mt thành phn.

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

- Xây dng mt cu trúc phân cp các thành phn bng cách s dng hàm
myWindow.getContentPane().add()  b sung thêm JPanel hoc nhng thành phn
giao din khác vào Frame:
Ví d: myWindow.getContentPane().add(new JButton(“OK”));// a vào mt nút
(JButton) có tên “OK” vào frame
- t li kích thc cho frame s dng hàm setSize():
myWindow.setSize(200, 300);// t li khung frame là 200 ( 300
- Gói khung frame ó li bng hàm pack():
myWindow.pack();
- Cho hin frame:
myWindow.setVisible(true);
Trang 124
II. Trình qun lý hin th trong Java
Khi thit k giao din  ha cho mt ng dng, chúng ta phi quan tâm n kích
thc và cách b trí (layout) các thành phn giao din nh: JButton, JCheckbox,
JTextField, v.v. sao cho tin li nht i vi ngi s dng. Java có các lp m nhim
nhng công vic trên và qun lý các thành phn giao din GUI bên trong các vt cha.
ng sau cung cp bn lp qun lý layout (cách b trí và sp xp) các thành phn GUI.
Tên lp Mô t
FlowLayout Xp các thành phn giao din trc tiên theo hàng t trái qua phi,
sau ó theo ct t trên xung di. Cách sp xp này là mc nh
i vi Panel, JPanel ,Applet và JApplet.
GridLayout Các thành phn giao din c sp xp trong các ô li hình ch
nht ln lt theo hàng t trái qua phi và theo ct t trên xung
i trong mt phn t cha. Mi thành phn giao din cha trong
t ô.
BorderLayout Các thành phn giao din (ít hn 5) c t vào các v trí theo các
ng: north (bc), south (nam), west (tây), east (ông) và center
(trung tâm)). Cách sp xp này là mc nhi vi lp Window,
Frame, Jframe, Dialog và JDialog.

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

public static final int CENTER
public static final int RIGHT
 i s aligment xác nh cách sp theo hàng: t trái, phi hay trung tâm,
horizongap và verticalgap là khong cách tính theo pixel gia các hàng các ct.
Trng hp mc nh thì khong cách gia các hàng, ct là 5 pixel.
2. Lp GridLayout
p GridLayout cung cp các hàm to lp  sp hàng các thành phn giao din:
GridLayout()
GridLayout(int rows, int columns)
GridLayout(int rows, int columns, int hoiongap, int verticalgap)
To ra mt li hình ch nht có rows ( columns ô có khong cách gia các hàng
các ct là horizongap, verticalgap. Mt trong hai i s rows hoc columns có th là
0, nhng không th c hai, GridLayout(1,0) là to ra li có mt hàng.
3.Lp BorderLayout
p BorderLayout cho phép t mt thành phn giao din vào mt trong bn hng: c
(NORTH), nam (SOUTH), ông (EAST), tây (WEST) và  gia (CENTER).
BorderLayout()
BorderLayout(int horizongap, int verticalgap)
To ra mt layout mc nh hoc có khong cách gia các thành phn (tính bng
pixel) là horizongap theo hàng và verticalgap theo ct.
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
Trng hp mc nh là CENTER, ngc li, có th chnh hng t các thành
phn comp vào phn t cha theo constraint là mt trong các hng trên.
III. X lý s kin trong Java

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

t
ItemEvent TextEvent
ContainerEvent FocusEvent
InputEvent
PaintEvent
WindowEvent
KeyEvent
MouseEven
t
java.awt.AWTEvent
Trang 127
- JCheckbox - khi trng thái ca hp kim tra Checkbox thay i.
- CheckboxMenuItem - khi trng thái ca hp kim tra Checkbox ng vi mc ca
thc n thay i.
- JRadioButton- khi trng thái ca hp chn (Option) thay i.
- JList - khi mt mc trong danh sách c chn hoc b loi b chn.
- JCompoBox - khi mt mc trong danh sách c chn hoc b loi b chn.
p ItemEvent có phng thc Object getItem(): Cho li i tng c chn hay va b
 chn.
d. TextEvent
Các thành phn ca GUI gây ra các s kin v text gm có:
TextArea - khi kt thúc bng nhn nút ENTER,
TextField - khi kt thúc bng nhn nút ENTER.
e. ComponentEvent
 kin này xut hin khi mt thành phn bn i/hin ra hoc thay thay i li kích thc.
p ComponentEvent có phng thc:
Component getComponent()
Cho li i tng tham chiu kiu Component.
f. ContainerEvent
 kin này xut hin khi mt thành phn c b sung hay b loi b khi vt cha

(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

S kin loi này xut hin khi thao tác vi các Window, chng hn nh: óng,
phóng to, thu nh.. mt ca s. Lp này có phng thc:
Window getWindow()
Hàm này cho li i tng ca lp Window ng vi s kin liên quan n Window
ã xy ra.
Kiu s kin Ngun gây ra s kin Phng thc ang ký, gõ b
i tng lng nghe
Giao din
Listener lng
nghe tng 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

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×