Chương 6
LP TRÌNH ĐỒ HO
Mt kh năng 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 đồ ho được tp trung vào thư vin mang tên Abstract Window
Toolkit (AWT). Đối vi mi h nn, thành phn AWT s được ánh x sang mt
thành phn nn c th, bng cách s dng trc tiếp 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 năng, 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 trược tiếp 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 hơn do vy ít gp li hơn và đặc bit
nó s dng ít tài nguyên ca h thng hơn các thành phn trong thư vin awt. Mc
dù các thành phn awt vn được h tr trong Java 2 nhưng, 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 s dng mô hình s
s kin ca awt.
I. Gii thiu v h thng đồ ho ca Java
1. Gii thiu chung
Thiết kế API cho lp trình đồ ho ca Java là mt ví d hoàn ho v cách dùng
lp, s kế 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, ô văn 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:
1 Componient Đây là lp (tru tượng) cha ca mi lp giao din người 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.
2 Container Là mt vt cha dùng để ghép nhóm các thành phn giao din
khác. Mi vt cha có mt lp qun lý hin th, lp qun lý hin th
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.
3 Jcomponient Là lp cha ca mi thành phn Swing ligth weight, được v
trc tiếp lên canvas bng mã lnh Java.
4 Window Được s dng để to ra mt ca s, Thông thường ta hay s dng
hai lp con ca nó là JFrame và JDialog.
5 JFrame là ca s không lng bên trong ca s khác.
6 JDialog là mt ca s được hin th dưới dng modal.
7 JAplet là lp cha ca mi lp ng dng aplet.
8 JPanel là mt vt cha, lưu gi các thành phn giao din người dùng.
9 Graphics là lp tru tượng cung cp ng cnh đồ ho để v các đối tượng
đồ ho như: Đường thng, đường tròn, hình nh…
10 Color lp này biu din mt mu sc.
11 Font lp này biu th cho mt font đồ ho.
12 FontMetrics là mt lp tru tượng dùng để xác định các thuc tính ca
Font.
Tt c các thành phn đồ ho trong thư vin Swing được nhóm trong gói
javax.swing. Đa s các thành phn trong thư vin Swing đều có tiếp đầ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 dưới đâ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.
Mt lp được kế tha t lp JComponent được th hin trong hình sau:
2. Mt s phương thc ca lp Component
Lp Component cung cp các thuc tính, phương thc chung cho các lp
con ca nó. Sau đây là mt s phương thc ca lp Component :
- Dimension getSize():cho li đối tượng thuc lp Dimension gm width (chiu
rng), height (chiu cao) xác định kích thước ca mt thành phn tính theo pixel.
- void setSize(int width, int height) và void setSize(Dimension d) đặt li kích
thước 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.
- 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 độ gc 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 tưng ca lp Color s được gii thiu phn sau.
- Font getFont(): được s dng để biết được font ca các ch đang x lý trong
thành phn đồ ha.
- void setFont(Font f):đặt li font ch cho mt thành phn.
- void setEnabled(boolean b):Nếu đối s b ca hàm getEnabled() là true thì thành
phn đang xét hot động bình thường, nghĩa là có kh năng kích hot (enable), có
th tr li các yêu cu ca người s dng và sinh ra các s kin như mong mun.
Ngược li, nếu là false thì thành phn tương ng s không kích hot được, nghĩa là
không th tr li được các yêu cu ca người s dng.
- Lưu ý: Tt c các thành phn giao din khi khi to đều được kích hot
- void setVisible(boolean b):Mt thành phn đồ ha có th được 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
Lp Container là lp con ca lp tru tượng Component. Các lp cha (lp
con ca Container) cung cp tt c các chc năng để xây dng các giao din đồ
ha ng dng, trong đó có phương thc add() được np chng dùng để b sung
mt thành phn vào vt cha và phương thc remove() cũng được np chng để
g b mt thành phn ra khi vt cha.
4. To ra Frame
Lp JFrame là lp con ca lp Frame (Frame là lp con ca lp Window)
được s dng để to ra nhng ca s cho các giao din ng dng GUI.
Kch bn chung để to ra mt ca s là:
1. To ra mt frame có tiêu đềđó, ví d “My Frame” :
JFrame myWindow= new JFrame(“My Frame”);
2. 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
3. Đặt li kích thước cho frame s dng hàm setSize():
myWindow.setSize(200, 300);// Đặt li khung frame là 200 ( 300
4. Gói khung frame đó li bng hàm pack():
myWindow.pack();
5. Cho hin frame:
myWindow.setVisible(true);
II. Trình qun lý hin th trong Java
Khi thiết kế giao din đồ ha cho mt ng dng, chúng ta phi quan tâm
đến kích thước 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 người 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.
Bng sau cung cp bn lp qun lý layout (cách b trí và sp xếp) các thành phn
GUI.