Tải bản đầy đủ (.doc) (26 trang)

giáo trình java tóm tắt - 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 (353.61 KB, 26 trang )

Giáo trình Java tóm tắt AWT
AWT
AWT 1
1. Giới thiệu 1
2. Container 2
3. Một số control thường dùng 8
4. Layout manager 15
5. Menu 25
1. Giới thiệu
1.1. Về AWT
AWT (Abstract Window Toolkit) là một package có sẵn trong JDK (java.awt), nó cung
cấp các thành phần cơ bản để xây dựng các ứng dụng GUI (Graphics User Interface –
Giao diện Người dùng Đồ họa).
Ứng dụng GUI được tạo ra bởi AWT sẽ không phụ thuộc vào hệ điều hành, có nghĩa là
chúng sẽ trông như nhau ở mọi loại máy tính.
1.2. Cấu trúc của AWT
AWT bao gồm nhiều class cho phép kế thừa, từ đó lập trình viên có thể tạo ra nhiều loại
control (thành phần giao diện) đa dạng theo ý mình.
Châu Hải Duy 1/26
Giáo trình Java tóm tắt AWT
Hình 1: Cấu trúc của AWT
Như hình trên, ở cấp cao nhất của AWT có các class như BorderLayout, FlowLayout,
MenuComponent, Component, Graphics, Image, Polygon, Dưới đó là các class như
Button, Canvas, MenuItem, Trong đó, Component và Container là hai class quan trọng
của AWT. Component là lớp cha của nhiều control thường dùng, còn Container là class
để chứa các Component khác.
2. Container
Container là một dẫn xuất của Component. Các đối tượng Container có khả năng chứa
các control khác (hoặc Container khác) bên trong nó.
Thông thường, khi cần dùng các Container thì ta sẽ tạo ra class kế thừa từ chúng.
2.1. Các loại Container


Có hai loại Container chính, đó là Window và Panel. Trong phần này chủ yếu đề cập tới
Window.
2.1.1. Window
Window là cửa sổ trên màn hình, là control độc lập nên không thuộc về Container nào.
Châu Hải Duy 2/26
Object
BorderLayout
CardLayout
CheckboxGroup
Color
Dimension
Event
Font
FlowLayout
FontMetrics
Graphics
GridBagLayout
GridLayout
Image
Insets
Point
Polygon
Rectangle
Toolkit
MenuComponent
Component
FileDialog
Button
Canvas
Checkbox

Choice
Container
ScrollBar
Label
List
Panel
Window
ScrollPane
Applet
Dialog
Frame
TextComponent
TextField
TextArea
MenuBar
MenuItem
Menu PopupMenu
CheckboxMenuItem
AWTException
AWTError
Exception
Error
Giáo trình Java tóm tắt AWT
Có hai loại Window là Frame và Dialog.
a. Frame
Frame là loại cửa sổ có thể có menu, có thể cho phép phóng to/thu nhỏ và thay đổi kích
thước bằng mouse.
Hình 2: AWT Frame
b. Dialog
Dialog là loại cửa sổ thường không có menu và thường không cho phép phóng to/thu

nhỏ hoặc thay đổi kích thước bằng mouse.
Dialog có hai trạng thái là modaless (mặc định) hoặc modal. Khi được hiển thị, một
modal Dialog sẽ "khóa" hết các cửa sổ khác của ứng dụng cho đến khi ta đóng Dialog
đó.
Trong hệ điều hành Windows, Dialog không có phần title ở taskbar.
Hình 3: AWT Dialog
2.1.2. Panel
Khác với Window, Panel là container không thể tồn tại độc lập mà phải thuộc về một
container nào đó. Panel là một vùng hình chữ nhật để chứa các control, và buộc phải
nằm trên một Window, một cửa sổ trình duyệt web hoặc một Panel khác.
Châu Hải Duy 3/26
Giáo trình Java tóm tắt AWT
2.2. Các thao tác cơ bản trên Container
2.2.1. Khởi tạo một Container
Bản thân Container chỉ có một phương thức khởi tạo mặc định. Tuy nhiên, các dẫn xuất
của Container là Window (gồm Dialog, Frame) và Panel, thì có nhiều phương thức
khởi tạo khác nhau.
a. Dialog
Dialog không có phương thức khởi tạo mặc định.
Khi tạo một Dialog, ta cần cho biết owner của nó. Owner của Dialog là một Frame hoặc
một Dialog khác. Nếu owner là null thì phương thức khởi tạo sẽ phát sinh
IllegalArgumentException.
Ngoài ra, còn các phương thức khởi tạo kèm theo title và trạng thái modal của Dialog.
Constructor Ý nghĩa
Dialog(Dialog owner)
Tạo Dialog với owner là một Dialog khác
Dialog(Dialog owner, String title)
Tạo một Dialog với owner là một Dialog
khác và tiêu đề là title.
Dialog(Frame owner, String title,

boolean modal)
Tạo một Dialog với owner là một Dialog
khác và tiêu đề là title, và là dạng modal
là modalstate.
Bảng 1: Một số constructor của Dialog
Ta cũng có các phương thức khởi tạo tương tự ứng cho trường hợp owner là một Frame.
b. Frame
Frame là cửa sổ độc lập nên không có owner. Các constructor của Frame bao gồm:
Constructor Ý nghĩa
Frame()
Tạo một Frame với các giá trị mặc định.
Frame(String title)
Tạo một Frame với tiêu đề là title.
Bảng 2: Một số constructor của Frame
c. Panel
Như đã nói trên, Panel không thể tồn tại độc lập mà phải thuộc về Container nào đó.
Constructor Ý nghĩa
Panel() Tạo một Panel với các giá trị mặc định.
Panel(LayoutManager layout) Tạo một Panel với LayoutManager có sẵn.
Bảng 3: Một số constuctor của Panel
Châu Hải Duy 4/26
Giáo trình Java tóm tắt AWT
Sau khi tạo xong, cần phải đưa Panel vào một Container khác thì nó mới hoạt động
được.
2.2.2. Thêm control vào Container
Để thêm control vào Container, ta dùng phương thức add(). Phương thức này có các
dạng overloading như sau:
Phương thức Ý nghĩa
Component add(Component c)
Thêm một control vào cuối Container.

Component add(Component c,int i)
Thêm control c vào vị trí i của Container.
Component add(String name,int i)
Thêm control có tên là name vào vị trí i của
Container. Phương thức này không còn
được dùng dùng kể từ JDK 1.1.
Bảng 4: Các phương thức add control vào Container
Nếu ta thêm control vào một Container đang được hiển thị trên màn hình thì phải gọi
phương thức validate để Container tiến hành vẽ lại các control bên trong nó. Nếu cần
thêm nhiều control cùng lúc, thì ta chỉ cần gọi validate một lần sau khi thêm control
cuối cùng.
2.2.3. Điều chỉnh các thuộc tính của Container
Ta có thể thay đổi các thông số như kích thước, vị trí, của Container bằng các phương
thức sau:
Phương thức Ý nghĩa
void setBounds(int x, int y, int
width, int height)
Đặt vị trí và kích thước của Container.
void setLocation(int x, int y)
Đặt vị trí của Container, trong đó (x, y) là
tọa độ góc trên-trái của Container
void setSize(int width, int height)
Đặt kích thước của Container, gồm chiều
rộng và chiều cao (tính bằng pixel).
void setFont(Font f)
Đặt kiểu font cho Conatiner.
void setLayout(LayoutManager mgr)
Đặt LayoutManager cho Container. Đặt
null có nghĩa là không dùng
LayoutManager.

void setVisible(boolean b)
Cho phép Container được hiển thị lên màn
hình hay không.
void setForeground(Color c)
Đặt màu cho Container.
Bảng 5: Một số phương thức cập nhật của Container
Nếu Container là Frame hoặc Dialog, ta có thể dùng thêm các phương thức sau:
Châu Hải Duy 5/26
Giáo trình Java tóm tắt AWT
Phương thức Ý nghĩa
void setTitle(String title)
Đặt tiêu đề cho Frame/Dialog.
void setResizable(boolean r)
Cho phép hoặc không cho phép người dùng
chỉnh kích thước của Frame/Dialog bằng
mouse.
void setSize(int width, int height)
Đặt kích thước của Container, gồm chiều
rộng và chiều cao (tính bằng pixel).
void setFont(Font f)
Đặt kiểu font cho Conatiner.
void setLayout(LayoutManager mgr)
Đặt LayoutManager cho Container. Đặt
null có nghĩa là không dùng
LayoutManager.
Bảng 6: Một số phương thức cập nhật của Frame và Dialog
Với Dialog, ta còn có thể cập nhật trang thái modal của nó bằng phương thức void
setModal(boolean b).
2.2.4. Bố trí control trên Container
Trong Container, các control được sắp đặt dựa vào LayoutManager. Tuy nhiên, ta cũng

có thể tự sắp đặt "thủ công" bằng cách disable LayoutManager của Container. Cách
dùng LayoutManager sẽ được trình bày sau.
Để disable LayoutManager, ta chỉ cần đặt LayoutManager của Container về null.
this.setLayout(null);
Sau đó, ta sẽ dùng phương thức setLocation để xác định tọa độ cho từng control trên
Container.
Sau khi đã sắp đặt xong, ta sẽ gọi hiển thị Container bằng phương thức setVisible
hoặc show.
2.2.5. Ví dụ
Để dùng AWT, ta phải import package AWT vào các file source code:
import java.awt.*;
Tạo Frame: ta sẽ tạo một class mới là Frame01 kế thừa từ Frame chuẩn. Trong phương
thức khởi tạo mặc định của Frame01, ta sẽ điều chỉnh các thông số như tiêu đề, vị trí, kích
thước cho phù hợp. Sau đó sẽ thêm một Panel vào Frame.
// Khai báo Frame01 kế thừa từ Frame
public class Frame01 extends Frame
{
private Panel pn=new Panel(); // Tạo một Panel
public Frame01()
{
this.setLayout(null); // Không dùng layout manager
Châu Hải Duy 6/26
Giáo trình Java tóm tắt AWT
this.setTitle("AWT Frame"); // Đặt tiêu đề cho Frame
this.setSize(450,400); // Đặt kích thước cho Frame
this.setLocation(100,100); // Đặt vị trí cho Frame

pn.setSize(150,80); // Đặt kích thước: rộng 150, cao 80
pn.setLocation(50,50); // Đặt vị trí: cột 50, dòng 50
pn.setBackground(Color.cyan); // Panel màu xanh lơ


this.add(pn); // Thêm Panel vào Frame
}
}
Tạo Dialog: Tương tự như trên, ta sẽ tạo ra một class là Dialog01 kế thừa từ Dialog
chuẩn. Owner của Dialog này sẽ là Frame vừa tạo ở trên. Sau khi tạo, ta sẽ chỉnh tiêu đề,
vị trí, kích thước rồi thêm vào nó một Label và một Button.
public class Dialog01 extends Dialog
{
private Button bt=new Button();
private Label lb=new Label();
public Dialog01(Frame frm)
{
super(frm); // Gọi constructor của Dialog
this.setLayout(null); // Không dùng LayoutManager
this.setSize(300,150);
this.setTitle("AWT Dialog");
this.setLocation(150,300);
this.setResizable(false); // Không cho user chỉnh size
lb.setSize(200,20);
lb.setText("Day la mot AWT Label!");
lb.setLocation(50,60);
lb.setAlignment(Label.CENTER);// Canh giữa text của Label
bt.setSize(50,20);
bt.setLabel("OK"); // Đặt text cho Button
bt.setLocation(125,100);
add(lb);
add(bt);
}
}

Gọi hiển thị Frame và Dialog vừa tạo:
public class AWT01
{
public static void main(String[]args)
{
Frame01 frm = new Frame01();
frm.setVisible(true); // Hiển thị Frame frm lên màn hình
Dialog01 dlg = new Dialog01(frm); // frm là owner của dlg
dlg.show(); // Hiển thị Dialog dlg lên màn hình
}
Châu Hải Duy 7/26
Giáo trình Java tóm tắt AWT
}
Kết quả như sau:
Hình 4: Kết quả chạy ví dụ
Tuy nhiên, khi nhấn thử các nút thì ta không thấy tác dụng gì. Để các nút nhấn hoạt động
được, ta phải thêm các phương thức xử lý cho những sự kiện của chúng. Cách xử lý sự
kiện sẽ được trình bày trong phần sau.
3. Một số control thường dùng
3.1. Tổng quát
Để tạo một control và đưa nó lên màn hình, dù nó thuộc loại nào, thông thường ta phải
qua các bước sau (ở đây chưa nói tới việc dùng LayoutManager):
 Khai báo và khởi tạo control (bằng từ khóa new).
 Đặt text cho control (nếu có) bằng constructor hoặc phương thức
setText(String s) / setTitle(String s).
 Chỉnh kích thước của control bằng phương thức setSize(int w, int h).
 Chỉnh vị trí của control bằng phương thức setLocation(int x, int y).
 Thêm control vào một Container bằng phương thức add(Component c).
3.2. Label
Label là control thường được dùng để thể hiện một câu thông báo lên màn hình. Người

dùng không thay đổi được nội dung của Label.
Các phương thức / constructor cần lưu ý:
Châu Hải Duy 8/26
Giáo trình Java tóm tắt AWT
Phương thức / Constructor Ý nghĩa
Label()
Tạo Label với giá trị mặc định.
Label(String text)
Tạo Label với text biết trước
Label(String text, int alignment)
Tạo Label với text và kiểu canh lề biết
trước
int getAlignment()
Trả về kiểu canh lề của Label, gồm:
 Label.LEFT (mặc định)
 Label.RIGHT
 Label.CENTER
String getText()
Trả về text của Label.
void setAlignment(int alignment)
Đặt kiểu canh lề cho Label, gồm:
 Label.LEFT (mặc định)
 Label.RIGHT
 Label.CENTER
void setText(String text)
Đặt text cho Label.
Bảng 7: Các phương thức chính của Label
Tạo Label và thêm nó vào một Container:
Label lb = new Label(); // Tạo một Label
lb.setSize(200,20); // Chỉnh kích thước của label

lb.setText("Day la mot AWT Label!"); // Chỉnh text của label
lb.setLocation(50,60); // Chỉnh vị trí của label
lb.setAlignment(Label.CENTER); // Canh giữa text của Label
this.add(lb); // Thêm label vào "this"
Kết quả:
Hình 5: AWT Label
3.3. Button
Button là nút lệnh, dùng để báo cho chương trình biết cần phải làm một công việc nào đó.
Các phương thức / constructor cần lưu ý:
Phương thức / Constructor Ý nghĩa
Button() Tạo Button với giá trị mặc định.
Button(String label) Tạo Button với nhãn biết trước
String getLabel() Trả về nhãn của Button.
Châu Hải Duy 9/26
Giáo trình Java tóm tắt AWT
Phương thức / Constructor Ý nghĩa
void setLabel(String text)
Đặt nhãn cho Button.
Bảng 8: Các phương thức chính của Button
Ví dụ:
Button bt=new Button("OK"); // Tạo button với nhãn là "OK"
bt.setSize(50,25); // Chỉnh kích thước cho button
bt.setLocation(125,100); // Chỉnh vị trí cho button
this.add(bt); // Thêm button vào "this"
Kết quả:
Hình 6: AWT Button
3.4. TextField
TextField được dẫn xuất từ TextComponent, là control cho phép người dùng nhập dữ
liệu, ví dụ như họ tên, năm sinh, Kiểu dữ liệu của TextField là chuỗi, nên ta cần chuyển
đổi nếu muốn dùng TextField để nhập dữ liệu kiểu số.

Lưu ý: TextField chỉ cho nhập liệu trên một dòng, nghĩa là không cho phép xuống dòng.
Các phương thức / constructor cần lưu ý:
Phương thức / Constructor Ý nghĩa
TextField() Tạo TextField với giá trị mặc định.
TextField(String label) Tạo TextField với nhãn biết trước.
String getText() Trả về text của TextField.
void setEditable(boolean b)
Cho phép hoặc không cho phép người dùng
thay đổi nội dung của TextField.
String getSelectedText()
Trả về đoạn text đang được chọn.
int getSelectionStart()
Trả về vị trí bắt đầu chọn khối.
int getSelectionEnd()
Trả về trí kết thúc chọn khối.
void setText(String text) Đặt text cho TextField.
void setSelectionStart(int start)
Đặt vị trí bắt đầu chọn khối.
void setSelectionStart(int end)
Đặt vị trí kết thúc chọn khối.
Bảng 9: Các phương thức chính của TextField
Châu Hải Duy 10/26
Giáo trình Java tóm tắt AWT
Ví dụ:
TextField tf=new TextField("Nguyen Van Teo");
tf.setSize(200,22);
tf.setLocation(30,100);
/* tf.setEditable(false); */ // Không cho người dùng sửa nội dung
this.add(tf);
Kết quả:

Hình 7: AWT TextField
Nếu ta không cho phép người dùng sửa nội dung, TextField sẽ có dạng sau:
Hình 8: TextField không cho thay đổi nội dung
3.5. Choice
Choice là control chứa sẵn các giá trị cho người dùng chọn lựa. Điều này giúp việc nhập
liệu được nhanh chóng và không bị lỗi.
Các phương thức cần lưu ý:
Phương thức / Constructor Ý nghĩa
Choice()
Tạo Choice với giá trị mặc định.
void add(String item)
Thêm một mục chọn mới vào cuối Choice.
String getItem(int i)
Trả về mục chọn thứ i.
int getItemCount()
Trả về số mục chọn đang có.
void insert(String item, int i)
Thêm một mục chọn mới vào vị trí i.
void remove(int position)
Xóa mục chọn thứ i.
void removeAll()
Xóa tất cả các mục chọn.
int getSelectedIndex()
Trả về vị trí của mục được chọn.
void select(int i)
Chọn mục thứ i. Việc chọn này không làm
phát sinh sự kiện ItemEvent.
Bảng 10: Các phương thức chính của Choice
Ví dụ:
Choice c=new Choice();

c.setSize(50,22);
Châu Hải Duy 11/26
Giáo trình Java tóm tắt AWT
c.setLocation(50,100);
for (float i=0;i<=10;i+=0.5) // Thêm các mục chọn cho Choice
c.add(""+i);
Kết quả:
Hình 9: AWT Choice
3.6. Checkbox
Checkbox là control cho phép người dùng chọn lựa với các giá trị có sẵn, thường là ít hơn
Choice. Một Checkbox có hai trạng thái, được chọn và không được chọn.
Có hai loại Checkbox là Checkbox thường và Checkbox dạng radio. Với Checkbox
thường, việc chọn nó không ảnh hưởng gì tới check box khác. Còn với Checkbox dạng
radio, việc chọn một Checkbox sẽ kéo theo việc bỏ chọn Checkbox đang được chọn trong
cùng nhóm (CheckboxGroup).
Mặc định, khi tạo một Checkbox thì nó sẽ là loại thường, muốn nó thành Checkbox dạng
radio thì ta phải đưa nó vào CheckboxGroup.
Các phương thức cần lưu ý:
Phương thức / Constructor Ý nghĩa
Checkbox() Tạo Checkbox với giá trị mặc định.
Checkbox(String label) Tạo Checkbox có sẵn nhãn
Checkbox(String label, boolean
state)
Tạo Checkbox có sẵn nhãn và trạng thái
(true = được chọn)
Checkbox(String label, boolean
state, CheckboxGroup group)
Tạo Checkbox với nhãn, trạng thái và group
(khi đó nó sẽ là Checkbox dạng radio).
CheckboxGroup getCheckboxGroup()

Trả về CheckboxGroup mà Checkbox đang
thuộc về.
String getLabel() Trả về nhãn của CheckBox.
boolean getState()
Cho biết trạng thái chọn / không chọn của
Checkbox.
Châu Hải Duy 12/26
Giáo trình Java tóm tắt AWT
void
setCheckboxGroup(CheckboxGroup g)
Đưa Checkbox vào một CheckboxGroup.
void setLabel(String label)
Đặt nhãn cho Checkbox.
void setState(boolean state)
Đặt trạng thái chọn / không chọn cho
Checkbox.
Bảng 11: Các phương thức chính của Checkbox
Khi dùng CheckboxGroup, ta cần lưu ý các phương thức sau (CheckboxGroup chỉ có
constructor mặc định):
Phương thức / Constructor Ý nghĩa
Checkbox getSelectedCheckbox()
Trả về Checkbox đang được chọn trong
nhóm.
void setSelectedCheckbox(Checkbox
box)
Chọn một Checkbox trong nhóm.
Bảng 12: Các phương thức chính của CheckboxGroup
Ví dụ tạo Checkbox thường:
Checkbox cb = new Checkbox("Auto save")
cb.setSize(100,22);

cb.setLocation(100,100);
this.add(cb);
Kết quả:
Hình 10: Checkbox dạng thường
Ví dụ tạo Checkbox dạng radio:
// Tạo CheckboxGroup
CheckboxGroup cbgGioiTinh=new CheckboxGroup();
// Tạo 2 Checkbox và đưa vào group
Checkbox cbNam=new Checkbox("Nam",cbgGioiTinh,true );
Checkbox cbNu =new Checkbox("Nu" ,cbgGioiTinh,false);
cbNam.setSize(50,22);
cbNam.setLocation(100,100);
cbNu.setSize(50,22);
cbNu.setLocation(155,100);
// Đưa 2 checkbox vào Container
this.add(cbNam);
this.add(cbNu );
Kết quả:
Châu Hải Duy 13/26
Giáo trình Java tóm tắt AWT
Hình 11: Checkbox dạng radio
3.7. List
List là control cho phép người dùng sự lựa chọn các giá trị từ danh sách có sẵn. Khác với
Choice, List cho phép người chọn 1 hoặc nhiều giá trị cùng lúc.
Các phương thức cần lưu ý:
Phương thức / Constructor Ý nghĩa
List()
Tạo List với giá trị mặc định (chỉ cho chọn
1 mục, hiển thị cùng lúc 4 mục).
List(int rows)

Tạo List với số mục hiển thị biết trước.
List(int rows,
boolean multipleMode)
Tạo List với số mục hiển thị và trạng thái đa
chọn lựa biết trước.
void add(String item)
Thêm mục mới vào cuối List.
void replaceItem(String newValue,
int index)
Thay thế mục thứ index bằng mục mới.
int getSelectedIndex()
Trả về thứ tự của mục đang được chọn.
int[] getSelectedIndexes()
Trả về thứ tự của những mục đang được chọn
(khi dùng List đa lựa chọn).
void select(int index)
Chọn mục thứ index.
void deselect(int index)
Bỏ chọn mục thứ index.
void setMultipleMode(boolean b)
Đặt trạng thái đa lựa chọn cho List.
Bảng 13: Các phương thức chính của List
Ví dụ:
List l=new List(); // Tạo List l
l.setSize(100,120);
l.setLocation(50,70);
l.setMultipleMode(true); // Cho phép đa lựa chọn
l.add("Mercury"); // Thêm các mục chọn
l.add("Venus");
l.add("Earth");

l.add("JavaSoft");
l.add("Mars");
l.add("Jupiter");
l.add("Saturn");
l.add("Uranus");
Châu Hải Duy 14/26
Giáo trình Java tóm tắt AWT
l.add("Neptune");
l.add("Pluto");
this.add(l);
Kết quả:
Hình 12: List
4. Layout manager
Trong phần trước, ta đã làm quen với cách bố trí control một cách "thủ công" nhờ vào
việc điều chỉnh tọa độ cho từng control. Cách này dễ hiểu nhưng sẽ rất khó khăn khi có
quá nhiều control, hoặc khi muốn cho control thay đổi kích thước theo Frame.
Để khắc phục khó khăn trên, Java cung cấp các lớp layout manager với tính năng chính là
chỉnh vị trí và kích thước control một cách tự động.
LayoutManager là một interface quy định các tính năng chung nhất của layout manager.
Sau đó, tùy vào cách sắp đặt mà ta có từng lớp cụ thể. Tài liệu này sẽ giới thiệu các
layout manager thường dùng của AWT, bao gồm BorderLayout, FlowLayout,
CardLayout và GridLayout.
Mỗi lớp container (Frame, Dialog, Panel, ) đều có một layout manager đi kèm, nếu
layout manager là null thì sẽ trở thành sắp đặt control "thủ công". Để đặt layout manager
cho container, ta dùng phương thức setLayout() của lớp Container.
4.1. Lớp GridLayout
Như tên gọi, layout manager này bố trí các control theo lưới, mỗi vị trí là một ô trong
lưới, và các ô có kích thước như nhau. Kích thước này được tự động điều chỉnh theo kích
thước lưới và container.
Nếu số control ít hơn số ô thì các ô còn lại sẽ được để trống.

Để tạo ra một border layout, ta dùng các phương thức sau:
Constructor Ý nghĩa
GridLayout()
Tạo grid layout mặc định với một dòng, còn
số cột thì tùy vào số control thêm vào
GridLayout(int rows, int cols)
Tạo grid layout với rows dòng và cols cột
GridLayout(int rows, int cols,
int hgap, int vgap)
Tạo grid layout với rows dòng và cols cột và
khoảng cách giữa các ô kề nhau là hgap
Châu Hải Duy 15/26
Giáo trình Java tóm tắt AWT
(ngang) và vgap (dọc)
Bảng 14: Các constructor của GridLayout
Ví dụ:
// Chỉnh title và kích thước của frame
this.setTitle("Grid Layout");
this.setSize(400,300);
// Tạo grid layout 3 dòng, 4 cột
this.setLayout(new GridLayout(3,4));
// Thêm các button vào frame
for(int i=0;i<10;i++)
this.add(new Button(String.valueOf(i)));
Kết quả:
Hình 13: GridLayout
Chỉnh khoảng trống giữa các ô: dùng constructor thứ ba
this.setLayout(new GridLayout(3,4,4,7));
Kết quả:
Châu Hải Duy 16/26

Giáo trình Java tóm tắt AWT
Hình 14: GridLayout với khoảng trống giữa các ô
4.2. Lớp BorderLayout
Layout manager này chia cửa sổ thành 5 vùng: bắc, đông, nam, tây và trung tâm như sau:
Hình 15: BorderLayout
Mỗi vùng như vậy có thể chứa một control hoặc một containner, và kích thước
control/container sẽ luôn lấp đầy vùng mà nó chiếm giữ.
Để tạo ra một border layout, ta dùng các phương thức sau:
Constructor Ý nghĩa
BorderLayout()
Tạo border layout mặc định (không có
khoảng cách giữa các vùng)
Châu Hải Duy 17/26
Bắc
North
Đông
East
Tây
West
Nam
South
Trung tâm
Center
Giáo trình Java tóm tắt AWT
BorderLayout(int hgap, int vgap)
Tạo border layout với khoảng cách giữa các
vùng là hgap (ngang) và vgap (dọc)
Bảng 15: Các constructor của BorderLayout
Khi thêm control vào container có border tayout, cần phải cho biết vị trí của control. Vị
trí này được quy định thông qua các hằng số như sau:

 BorderLayout.NORTH: ở vùng trên
 BorderLayout.WEST: ở vùng bên trái
 BorderLayout.CENTER: ở chính giữa
 BorderLayout.EAST: ở vùng bên phải
 BorderLayout.SOUTH: ở vùng dưới
Ví dụ:
// Chỉnh title và kích thước của frame
this.setTitle("Border Layout");
this.setSize(400,300);
// Đặt layout manager cho frame
this.setLayout(new BorderLayout());
// Thêm các button vào frame
this.add(new Button("North") ,BorderLayout.NORTH);
this.add(new Button("East") ,BorderLayout.EAST);
this.add(new Button("South") ,BorderLayout.SOUTH);
this.add(new Button("West") ,BorderLayout.WEST);
this.add(new Button("Center") ,BorderLayout.CENTER);
Kết quả:
Hình 16: Frame dùng BorderLayout
Khi resize frame: các Button tự động resize theo
Châu Hải Duy 18/26
Giáo trình Java tóm tắt AWT
Hình 17: Frame dùng BorderLayout sau khi resize
Chỉnh khoảng trống giữa các vùng: dùng constructor thứ hai
this.setLayout(new BorderLayout(4,7));
Kết quả:
Hình 18: BorderLayout với khoảng cách ngang-dọc là 4-7 pixel
4.3. Lớp FlowLayout
Layout manager này đặt các control thành hàng ngang, canh cho các control nằm giữa
hoặc trái/phải của container, và chỉnh size của control tùy vào nội dung của nó (như label

chẳn hạn).
Các kiểu canh lề của flow layout được quy định như sau:
 FlowLayout.CENTER: canh giữa (mặc định)
Châu Hải Duy 19/26
Giáo trình Java tóm tắt AWT
 FlowLayout.LEADING: canh từ đầu dòng, nếu dùng kiểu trình bày từ trái qua phải
thì đầu dòng sẽ là bên trái
 FlowLayout.LEFT: canh trái
 FlowLayout.RIGHT: canh phải
 FlowLayout.TRAILING: canh từ cuối dòng, nếu dùng kiểu trình bày từ trái qua
phải thì đầu dòng sẽ là bên phải
Để tạo ra một flow layout, ta dùng các phương thức sau:
Constructor Ý nghĩa
FlowLayout()
Tạo flow layout canh giữa với khỏang cách
ngang-dọc là 5 pixel
FlowLayout(int align)
Tạo flow layout với kiểu canh lề quy định
bới thông số align, khoảng cách ngang-dọc
là 5 pixel
FlowLayout(int align, int hgap,
int vgap)
Tạo flow layout với kiểu canh lề quy định
bới thông số align, khoảng cách ngang-dọc
là là hgap và vgap.
Bảng 16: Các constructor của FlowLayout
Ví dụ:
// Chỉnh title và kích thước của frame
this.setTitle("Flow Layout");
this.setSize(400,200);

// Dùng flow layout mặc định
this.setLayout(new FlowLayout());
// Thêm các button vào frame
for(int i=0;i<10;i++)
this.add(new Button(String.valueOf(i)));
Kết quả:
Hình 19: Frame với FlowLayout
Sau khi resize: các control tự xuống dòng và vẫn giữ kiểu canh lề như cũ.
Châu Hải Duy 20/26
Giáo trình Java tóm tắt AWT
Hình 20: Frame sau khi resize
Đổi qua kiểu canh lề phải: dùng contructor thứ hai
this.setLayout(new FlowLayout(FlowLayout.RIGHT));
Kết quả:
Hình 21: Flow layout canh lề phải
4.4. Lớp CardLayout
Card layout cho phép ta add nhiều control vào container, nhưng trong một thời điểm chỉ
có một control được hiển thị, và control này chiếm toàn bộ container.
Khi thêm một control vào card layout, ta phải cung cấp một String cho nó để card layout
dựa vào đó mà gọi control khi cần.
Theo mặc định thì control thêm vào đầu tiên sẽ được hiển thị.
Để tạo ra một flow layout, ta dùng các phương thức sau:
Constructor Ý nghĩa
CardLayout()
Tạo card layout không có khoảng cách
CardLayout(int hgap, int vgap)
Tạo card layout với khoảng cách ngang-dọc
giữa control so với biên của container là
hgap và vgap.
Hình 22: Các constructor của CardLayout

Châu Hải Duy 21/26
Giáo trình Java tóm tắt AWT
Ví dụ:
// Chỉnh title và kích thước của frame
this.setTitle("Card Layout");
this.setSize(400,200);
// Dùng card layout
CardLayout cl= new CardLayout();
this.setLayout(cl);
// Thêm các button vào frame, dùng i làm chuỗi nhân dạng các button
for(int i=0;i<10;i++)
this.add(new Button("Button "+i),String.valueOf(i));
Kết quả:
Hình 23: Frame dùng card layout
Để chỉ định control được hiển thị, ta dùng các phương thức sau:
Phương thức Ý nghĩa
void first(Container parent)
Hiển thị control đầu tiên, parent là container
chứa control đó
void last(Container parent)
Hiển thị control cuối cùng, parent là
container chứa control đó
void next(Container parent)
Hiển thị control kế tiếp, parent là container
chứa control đó
void previous(Container parent)
Hiển thị control trước đó, parent là container
chứa control đó
void show(Container parent,
String name)

Hiển thị control ứng với chuỗi nhận dạng
name
Ví dụ: Hiển thị button ứng với chuỗi "3" (đã add lúc trước)
cl.show(this,"3");
Kết quả:
Châu Hải Duy 22/26
Giáo trình Java tóm tắt AWT
Hình 24: Frame với button thứ 3 được hiển thị
4.5. Lớp GridBagLayout
Đây là một layout manager rất mạnh, tuy nhiên việc sử dụng layout manager này khá
phức tạp nên không tiện trình bày ở đây. Chi tiết xin xem trong Java API Documents.
Trong thực tế, ta có thể phối hợp các layout manager ở trên thay cho gird bag layout.
Ví dụ:
// Chỉnh title và kích thước của frame
this.setTitle("Grid Bag Layout");
this.setSize(400,200);
// Dùng grid bag layout
GridBagLayout gb=new GridBagLayout();
GridBagConstraints c=new GridBagConstraints();
this.setLayout(gb);
// Thêm các button vào frame
c.weighty = 1; // Chiếm hết chiều dọc của container
c.weightx = 1; // Chiếm hết chiều ngang của container
c.fill = GridBagConstraints.BOTH; // Tự resize control theo hai hướng
themNut("Nut 1",gb,c);
themNut("Nut 2",gb,c);
c.gridwidth = GridBagConstraints.REMAINDER; // button cuối của dòng
themNut("Nut 3",gb,c);
themNut("Nut 4",gb,c);
c.gridwidth = GridBagConstraints.RELATIVE; // button kế cuối

themNut("Nut 5",gb,c);
c.gridwidth = GridBagConstraints.REMAINDER;
themNut("Nut 6",gb,c);
c.gridwidth = 1;
c.gridheight = 2; // Chiếm 2 đơn vị chiều cao
themNut("Nut 7",gb,c);
c.gridwidth = GridBagConstraints.REMAINDER;
c.gridheight = 1; // Chiếm 1 đơn vị chiều cao
themNut("Nut 8",gb,c);
c.gridwidth = 1;
themNut("Nut 9",gb,c);
themNut("Nut 0",gb,c);
Trong đó, phương thức themNut() như sau:
private void themNut(String s,GridBagLayout gb,GridBagConstraints c)
{
Châu Hải Duy 23/26
Giáo trình Java tóm tắt AWT
Button bt=new Button(s);
gb.setConstraints(bt,c);
this.add(bt);
}
Kết quả:
Hình 25: Frame với grid bag layout
4.6. Phối hợp các loại layout
Mỗi container chỉ được phép dùng một layout manager. Để dùng nhiều layout manager
trên một container, ta cần chia nó thành từng panel, sau đó trong mỗi panel ta dùng một
layout manager khác nhau.
Ví dụ:
// Chỉnh title và kích thước của frame
this.setTitle("Mixing Layouts");

this.setSize(400,200);
// Tạo ra các panel
Panel pn1=new Panel();
Panel pn2=new Panel();
// Chỉnh màu cho các panel để dễ phân biệt
pn1.setBackground(Color.pink);
pn2.setBackground(Color.green);
// Đặt layout manager cho các panel
pn1.setLayout(new FlowLayout());
pn2.setLayout(new BorderLayout(4,7));
// Đặt grid layout cho frame
this.setLayout(new GridLayout(2,1));
// Đưa các panel vào frame
this.add(pn1);
this.add(pn2);
// Đưa các button vào panel pn1
for(int i=0;i<10;i++)
pn1.add(new Button("Button "+i));
// Đưa các button vào panel pn2
pn2.add(new Button("North") ,BorderLayout.NORTH);
pn2.add(new Button("East") ,BorderLayout.EAST);
pn2.add(new Button("South") ,BorderLayout.SOUTH);
pn2.add(new Button("West") ,BorderLayout.WEST);
pn2.add(new Button("Center") ,BorderLayout.CENTER);
Châu Hải Duy 24/26
Giáo trình Java tóm tắt AWT
Kết quả:
Hình 26: Frame với hai kiểu layout manager
5. Menu
Menu trong AWT bao gồm các class: MenuBar, Menu, MenuItem và CheckboxMenuItem.

Hình 27: Các thành phần của menu
Để tạo menu, ta sẽ tạo một MenuBar, sau đó tạo các Menu rồi add vào MenuBar, sau cùng
là tạo các MenuItem rồi đưa chúng vào từng Menu tương ứng.
Sau khi tạo xong, ta thêm menu vào Window bằng phương thức setMenuBar().
Ví dụ:
// Tạo menu bar
MenuBar mnb=new MenuBar();
// Tạo các menu
Menu mnFile=new Menu("File"); // Tạo menu file
Menu mnTool=new Menu("Tools"); // Tạo menu tools
// Tạo các menu item
Châu Hải Duy 25/26

×