L P TRÌNH GIAO DIN TRÊN JAVA
6.3.1 Trình bày FlowLayout
Cách trình bày Flow Layout s x p các đ i t ng trên m t h ng theo dòng. N u đ i t ng m i thêm không đ ch (chi u r ng) thì nó s t đ ng thêm vào đ u dòng m i. Các ph ng th c:
• FlowLayout(): Kh i t o đ i t ng trình bày.
• FlowLayout(int): Kh i t o đ i t ng trình bày v i cách c n l xác đnh.
• FlowLayout(int, int, int): Kh i t o v i ba tham s : Th nh t là cách c n l , th hai là kho ng cách gi a hai dòng (chi u cao), th ba là kho ng cách gi a hai đ i t ng (chi u ngang).
Tham s c n l có th nh n m t trong ba giá tr :
• FlowLayout.LEFT: C n l trái, là giá tr m c đnh. • FlowLayout.CENTER: C n l gi a.
• FlowLayout.RIGHT: C n l ph i.
Ch ng trình 6.12 minh ho cách trình bày flow layout: T o ra m t dãy 10 nút nh n và g n vào m t frame theo ki u flow layout.
Ch ng trình 6.12
package vidu.chuong6; import java.awt.*;
public class FlowLayoutDemo{
public static void main(String[] args) { // Khai báo và kh i t o frame có tiêu đ
Frame myFrame = new Frame(“Frame has somes buttons!”); myFrame.setSize(300,150); // nh kích c frame
myFrame.setLayout(new FlowLayout( ));// Thi t l p cách trình bày
// Khai báo và kh i t o button for(int i=0; i<10; i++)
myFrame.add(new Button(“Click”+i));// G n vào frame myFrame.setVisible(true); // Hi n th frame }
}
Hình 6.11: K t qu demo Flow layout
6.3.2 Trình bày Grid Layout
Cách trình bày Grid Layout s s p x p các đ i t ng theo d ng b ng, đ c xác đnh s hàng và s c t. Ph ng th c c b n:
• GridLayout(int, int): Kh i t o m t đ i t ng trình bày. Hai tham s đ u vào l n l t là s hàng và s c t c a grid trình bày.
• GridLayout(int, int, int, int): Kh i t o m t đ i t ng trình bày, hai tham s đ u xác
đnh s hàng và s c t trình bày. Hai tham s sau xác đnh kho ng cách gi a các dòng và các c t c a b ng.
L u ý:
• Khi s l ng đ i t ng đ c chèn nhi u h n vào frame, ta mu n ch ng trình t tính s hàng, ho c t tính s c t hi n th , thì ta đ tham s t ng ng là 0.
Ví d :
setLayout(new GridLayout(3,0));
setLayout(new GridLayout(0,2));
s c đnh s c t là 2, s dòng là m m d o theo s các đ i t ng trong frame.
Ch ng trình 6.13 minh ho cách trình bày grid layout: T o ra m t dãy 10 nút nh n và g n vào m t frame theo ki u grid layout.
Ch ng trình 6.13
package vidu.chuong6; import java.awt.*;
public class GridLayoutDemo{
public static void main(String[] args) { // Khai báo và kh i t o frame có tiêu đ
Frame myFrame = new Frame(“Frame has somes buttons!”); myFrame.setSize(300,150); // nh kích c frame
myFrame.setLayout(new GridLayout(0,2));// Thi t l p cách trình bày
// Khai báo và kh i t o button for(int i=0; i<10; i++)
myFrame.add(new Button(“Click”+i));// G n vào frame myFrame.setVisible(true); // Hi n th frame }
}
Hình 6.12: K t qu demo Grid layout
6.3.3 Trình bày Border Layout
Cách hi n th Border Layout s chia frame thành 5 vùng c đnh và t đ ng kéo dãn các vùng sao cho chi m h t b m t c a frame:
• West: Vùng phía tây, t c là phía l bên trái. • East: Vùng phía đông, t c là phía l bên ph i. • North: Vùng phía b c, t c là phía l trên. • South: Vùng phía nam, t c là phía l d i. • Center: Vùng trung tâm, chính gi a frame. Ph ng th c c b n c a l p BorderLayout:
• BorderLayout(): Kh i t o m t đ i t ng trình bày theo cách border.
Khi m t frame đ c trình bày theo cách border, ta có th dùng ph ng th c sau đ g n các đ i t ng vào các vùng c a frame:
< i t ng frame>.add(<Vùng border>, < i t ng component>); Ví d :
myFrame.add(“Center”, new Button(“Click”));
s gán vào vùng trung tâm c a myFrame m t nút nh n có tên là “Click”.
L u ý:
• Cách trình bày border luôn chia frame thành 5 vùng xác đnh.
• N u g n nhi u đ i t ng vào cùng m t vùng, ch có đ i t ng g n sau là nhìn th y đ c. • N u mu n trong m t vùng ch a đ c nhi u đ i t ng, ta có th g n vào m i vùng m t
Panel. Sau đó trong panel, ta ch n cách trình bày riêng cho panel và g n các đ i t ng vào panel.
Ch ng trình 6.14 minh ho cách trình bày border: Ta s g n vào n m vùng c a frame n m nút nh n khác nhau.
Ch ng trình 6.14
package vidu.chuong6; import java.awt.*;
public class BorderLayoutDemo{
public static void main(String[] args) { // Khai báo và kh i t o frame có tiêu đ
Frame myFrame = new Frame(“Frame has somes buttons!”);
myFrame.setSize(300,150); // nh kích c frame myFrame.setLayout(new BorderLayout()); // nh cách trình bày
// Khai báo và kh i t o button
myFrame.add(“West”, new Button(“West”)); // G n vào vùng west myFrame.add(“East”, new Button(“East”)); // G n vào vùng east myFrame.add(“North”, new Button(“North”)); // G n vào vùng north myFrame.add(“South”, new Button(“South”)); // G n vào vùng south // G n vào vùng center
myFrame.add(“Center”, new Button(“Center”));
myFrame.setVisible(true); // Hi n th frame }
}
6.3.4 Trình bày GridBag Layout
Cách trình bày GridBag Layout c ng trình bày các đ i t ng t ng t nh Grid Layout: Các đ i t ng s đ c đnh v theo v trí các ô (cell) c a m t khung l i (grid). Tuy nhiên, GridBag cho phép ta đnh kích th c c a đ i t ng s chi m bao nhiêu ô và s đ c đ t v trí nào trong khung l i. Các ph ng th c c b n:
• GridBagLayout(): Kh i t o m t đ i t ng trình bày theo cách gridbag.
• setConstraints(Component, GridBagConstraints): t v trí và kích th c c a đ i t ng component theo các ràng bu c trong gridbagConstraints.
GridBagConstraints
ây là l p ch a các ràng bu c cho các đ i t ng đ c trình bày theo cách GridBag. Các ph ng th c và thu c tính c b n c a l p GridBagConstraints:
• GridBagConstraints(): Kh i t o m t đ i t ng ràng bu c c a GridBag.
• gridx/gridy: V trí c a cell mà ta mu n đ t đ i t ng vào (theo chi u X và chi u Y).
• gridwidth/gridheight: Kích th c (vùng trình bày) c a đ i t ng (Theo chi u r ng và chi u cao).
• fill: Xác đnh cách đ t đ i t ng, theo 4 cách:
- GridBagConstraints.NONE: i t ng không thay đ i kích th c theo các cell nó chi m.
- GridBagConstraints.VERTICAL: i t ng có chi u cao kín vùng nó chi m - GridBagConstraints.HORIZONAL: i t ng có chi u r ng kín vùng nó chi m - GridBagConstraints.BOTH: i t ng có chi u cao và chi u r ng ph kín vùng
nó chi m.
• ipadx/ipady: nh đ n v t ng gi m kích th c c a đ i t ng khi khung ch a b thay đ i kích th c (theo chi u X và chi u Y).
• insets: Xác đnh kho ng cách gi a các cell theo b n h ng: Trên, d i, trái, ph i.
• anchor: Xác đnh v trí neo đ i t ng khi kích th c khung ch a thay đ i. Bao g m: NORTH, NORTHEAST, NORTHWEST, EAST, SOUTH, SOUTHEAST, SOUTHWEST.
• weightx/weighty: nh kho ng cách l n ra t ng đ i gi a các đ i t ng v i nhau. Ch ng trình 6.15 minh ho cách trình bày gridbag: T o ra ba nút nh n trong frame, m i nút có m t s ràng bu c khác nhau v kích th c và v trí.
Ch ng trình 6.15
package vidu.chuong6; import java.awt.*;
public class GridBagLayoutDemo{
// Khai báo và kh i t o frame có tiêu đ
Frame myFrame = new Frame(“Frame has somes buttons!”); myFrame.setSize(300,150); // nh kích c frame
GridBagLayout layout = new GridBagLayout();
myFrame.setLayout(layout); // nh cách trình bày
// Khai báo đ i t ng ràng bu c
GridBagConstraints cts = new GridBagConstraints(); cts.fill = GridBagConstraints.BOTH;
// Button1: v trí (1,1), kích th c (1,1) Button btn1 = new Button(“Click1”);
cts.gridx = 1; cts.gridy = 1; cts.gridheight = 1; cts.gridwidth = 1;
layout.setConstraints(btn1, cts); // nh ràng bu c myFrame.add(btn1); // G n vào frame
// Button2: v trí (2,2), kích th c (1,1) Button btn2 = new Button(“Click2”);
cts.gridx = 2; cts.gridy = 2; cts.gridheight = 1; cts.gridwidth = 1;
layout.setConstraints(btn2, cts); // nh ràng bu c myFrame.add(btn2); // G n vào frame
// Button3: v trí (3,3), kích th c (1,1) Button btn3 = new Button(“Click3”);
cts.gridx = 3; cts.gridy = 3; cts.gridheight = 1; cts.gridwidth = 1;
layout.setConstraints(btn3, cts); // nh ràng bu c myFrame.add(btn3); // G n vào frame
myFrame.setVisible(true); // Hi n th frame }
Hình 6.14: K t qu demo Gridbag layout
6.3.5 Trình bày Null Layout
Cách trình bày Null Layout s trình bày các đ i t ng không theo m t quy t c nào. T t c đ u do ng i dùng t đnh v và thi t l p kích th c cho m i đ i t ng.
• nh v đ i t ng b ng ph ng th c setLocation(): < i t ng>.setLocation(Point);
• nh kích th c đ i t ng b ng ph ng th c setSize(): < i t ng>.setSize(int, int);
• Ngoài ra, có th v a đnh v , v a đnh kích th c cho đ i t ng thông qua ph ng th c: < i t ng>.setBounds(int, int, int, int);
Trong đó, hai tham s d u đnh v đ i t ng, hai tham s sau đnh kích th c đ i t ng.
Ch ng trình 6.16 minh ho cách trình bày t do Null layout: t o ra hai nút nh n và g n vào frame theo hai cách khác nhau.
Ch ng trình 6.16
package vidu.chuong6; import java.awt.*;
public class NullLayoutDemo{
public static void main(String[] args) { // Khai báo và kh i t o frame có tiêu đ
Frame myFrame = new Frame(“Frame has somes buttons!”); myFrame.setSize(300,150); // nh kích c frame myFrame.setLayout(null); // nh cách trình bày
// Button1: v trí (10,30), kích th c (100,40) Button btn1 = new Button(“Click1”);
btn1.setSize(100, 40);
btn1.setLocation(new Point(10, 30));
myFrame.add(btn1); // G n vào frame
// Button2: v trí (70,120), kích th c (50,20) Button btn2 = new Button(“Click2”);
btn2.setBounds(70, 120, 50, 20);
myFrame.setVisible(true); // Hi n th frame }
}
Hình 6.15: K t qu demo Null layout
6.4 HTML & APPLET
Applet là m t ch ng trình Java có th ch y trong các trình duy t web có h tr Java. T t c các applet đ u là các l p con c a l p Applet. t o applet, ta c n import hai gói sau:
import java.applet.*; import java.awt.*;
6.4.1 C u trúc c a m t Applet
C u trúc t ng quát c a m t applet nh sau:
public class <Tên l p applet> extends Applet{ … // Các thu c tính
public void init(){…} public void start(){…} public void stop(){…} public void destroy(){…} … // Các ph ng th c khác }
Các ph ng th c c b n c a m t applet:
• init(): Kh i t o các tham s , n u có, c a applet. • start(): Applet b t đ u ho t đ ng.
• stop(): Ch m d t ho t đ ng c a applet.
• destroy(): Th c hi n các thao tác d n d p tr c khi thoát kh i applet.
L u ý:
• Không ph i t t c các applet đ u ph i cài đ t đ y đ 4 ph ng th c c b n trên. Applet còn có th cài đ t m t s ph ng th c tu ch n (không b t bu c) sau:
• paint(Graphics): Ph ng th c v các đ i t ng giao di n bên trong applet. Các thao tác v này đ c th c hi n b i đ i t ng đ ho Graphics (là tham s đ u vào).
• repaint(): Dùng đ v l i các đ i t ng trong applet. Ph ng th c này s t
• update(Graphics): Ph ng th c này đ c g i sau khi th c hi n ph ng th c paint nh m t ng hi u qu v . Ph ng này s t đ ng g i ph ng th c paint(). Ch ng trình 6.17 cài đ t m t applet đ n gi n, m i ph ng th c s in ra thông báo r ng applet
đang trong th i đi m t ng ng.
Ch ng trình 6.17
package vidu.chuong6; import java.awt.*; import java.applet.*;
public class SimpleApplet extends Applet{
private StringBuffer buffer; // Chu i thông báo
public void init(){ // Kh i t o buffer = new StringBuffer();
addBuffer(“initializing…”); }
public void start(){ // Kích ho t addBuffer(“starting…”);
}
public void stop(){ // D ng addBuffer(“stopping…”);
}
public void destroy(){ // Thoát addBuffer(“unloading…”);
}
private void addBuffer(String newBuffer){
buffer.append(newBuffer); // Thêm thông báo repaint();
}
public void paint(Graphics g){
g.drawString(buffer.toString(), 5, 15); // Hi n thông báo }
}
6.4.2 S d ng applet
Applet không th ch y nh m t ng d ng Java đ c l p (nó không có hàm main), mà nó ch ch y
đ c khi đ c nhúng trong m t trang HTML (đuôi .htm, .html) và ch y b ng m t trình duy t web thông th ng.
Các b c xây d ng và s d ng m t applet bao g m:
• Biên d ch mã ngu n thành l p .class • Nhúng mã .class c a applet vào trang html.
nhúng m t applet vào m t trang html, ta dùng th (tag) <Applet> nh sau: <APPLET CODE = “Tên_file_applet.class”
WIDTH = “Chi u_r ng” HEIGHT = “Chi u_cao”> </APPLET>
Trong đó:
• Tên applet là tên file mã ngu n đã biên d ch thành file ch y có đuôi .class c a Java. • Chi u r ng và chi u cao là kích th c c a vùng trên trang html mà applet s đ c đ t vào. Ví d , trong trang myHtml.htm có ch a n i dung nh sau:
<HTML> <HEAD>
<TITLE> A simple applet </TITLE> </HEAD>
<BODY>
This is the output of applet:
<APPLET CODE = “SimpleApplet.class” WIDTH=200 HEIGHT=20> </APPLET>
</BODY> </HTML>
s nhúng applet đã đ c đnh ngh a trong ch ng trình 6.17 vào m t vùng có kích th c 200*20 trong trang myHtml. Bây gi , ta có th ki m nghi m ch ng trình applet c a mình b ng cách m trang myHtml trên các trình duy t thông th ng.
Ch ng trình 6.18 cài đ t m t applet có ch c n ng t ng t nh ch ng trình 6.7, th c hi n các thao tác tính toán c b n trên hai s . Ngo i tr vi c đây là m t applet, nên có th ch y trên m t trang html. Ch ng trình 6.18 package vidu.chuong6; import java.awt.*; import java.awt.event.*; import java.applet.*;
public class AppletDemo extends Applet implements ActionListener{ Label lbl1, lbl2, lblKq;
TextField txt1, txt2;
Button btnCong, btnTru, btnNhan, btnChia, btnThoat;
public void init(){
this.setLayout(new GridLayout(6,2)); //Ch đ hi n th 6 dòng, 2 c t lbl1 = new Label(“So thu nhat:”); // Nhãn s th nh t
txt1 = new TextField(); // Ô v n b n s th nh t this.add(txt1);
lbl2 = new Label(“So thu hai:”); // Nhãn s th hai this.add(lbl2);
txt2 = new TextField(); // Ô v n b n s th hai this.add(txt2);
lblKq = new Label(); // Nhãn k t qu this.add(lblKq);
this.add(new Label());
// Các nút nh n
btnCong = new Button(“Cong”); // Nút c ng btnCong.addActionListener(this); // B t s ki n this.add(btnCong);
btnTru = new Button(“Tru”); // Nút tr btnTru.addActionListener(this);
this.add(btnTru);
btnNhan = new Button(“Nhan”); // Nút nhân btnNhan.addActionListener(this);
this.add(btnNhan);
btnChia = new Button(“Chia”); // Nút chia btnChia.addActionListener(this);
this.add(btnChia);
btnThoat = new Button(“Thoat”); // Nút thoát btnThoat.addActionListener(this);
this.add(btnThoat); }
/* Ph ng th c x lí s ki n nút đ c nh n */ public void actionPerformed(ActionEvent ae){
float x = Float.parseFloat(txt1.getText()); float y = Float.parseFloat(txt2.getText()); float kq = 0;
if(ae.getSource() == btnCong) // C ng hai s kq = x + y;
if(ae.getSource() == btnTru) // Tr hai s kq = x - y;
if(ae.getSource() == btnNhan) // Nhan hai s kq = x*y;
if(ae.getSource() == btnChia)&&(y != 0) // Chia hai s kq = x/y;
if(ae.getSource() == btnThoat) // Thoát kh i ch ng trình System.exit(0);
// Thay đ i n i dung k t qu
lblKq.setText(“Ket qua la: ” + String.valueOf(kq)); repaint(); // V l i các đ i t ng }
}
Khi nhúng applet này vào m t trang html b t kì, ta có th ki m tra th y r ng nó có ch c n ng t ng t nh ng d ng 6.7.
L u ý, s khác nhau gi a m t application và m t applet:
• Application là m t ng d ng Java đ c l p, nó có th ch y đ c l p trên máy o Java. Trong khi đó, applet ch ch y đ c khi nhúng trong m t trang html, ch y nh vào các trình duy t web có h tr Java.
• Application ch y d a vào hàm main(). Trong khi đó, applet không có hàm main().
• hi n th các thông báo, application dùng System.out.println(). Trong khi đó, applet dùng ph ng th c drawString() c a l p Graphics.