Xem mẫu
- GV: Vũ Đình Hồng
Khoa: CNTT – TỨD
- Layout manager điều khiển cách trình bày vật lý của các
phần tử GUI như là button, textbox, option button v.v… Một
layout manager tự động bố trí các thành phần này trong
container.
Các kiểu trình bày khác nhau:
Flow layout
Border layout
Card layout
Grid layout
GridBag Layout
Layout mặc định (Default):
Applet và Panel: Flow layout
Window, Frame và Dialog: Border layout
- Đây là layout manager mặc định cho Applet và
Panel. Các thành phần được xắp xếp từ góc trái trên đến
góc phải dưới của màn hình. Khi một số thành phần
được tạo, chúng được xắp xếp theo hàng, từ trái sang
phải-từ trên xuống dưới.
- Các constructor của FlowLayout:
new FlowLayout() // Mặc định (default), khoảng cách giữa các component
là 5 pixes. Canh theo Center
new FlowLayout(int align)// Qui định canh lề (trái phải hay center)
new FlowLayout(int align, int hgap, int vgap)// Qui định canh lề và khoảng
cách theo chiều ngang, dọc của các component.
Ví dụ:
FlowLayout mylayout = new FlowLayout() //Default
Loại thứ hai bạn có thể viết:
FlowLayout exLayout=new FlowLayout(FlowLayout.RIGHT);
Hay
setLayout(new FlowLayout(FlowLayout.RIGHT));
Nếu viết theo giá trị int thì:
1=Center
2=Right
3=Left
Ví dụ
FlowLayout exLayout=new FlowLayout(2);
- BorderLayout là layout manager mặc định cho Window,
Frame và Dialog. Layout này xắp xếp tối đa 5 thành
phần trong một container. Những thành phần này có thể
được đặt ở các hướng North, South, East, West và Center
của container.
NORTH – Đặt ở đỉnh của container.
EAST – Đặt phía bên phải của container.
SOUTH – Đặt ở phía dưới của container.
WEST – Đặt phía bên trái của container.
CENTER – Đặt ở giữa của container.
- Nếu ta không qui định gì khi thêm component vào Frame,
Window và Dialog thì các component sẽ có kích thước tối đa
và component sau cùng sẽ đè lên các component trước tại vị
trí Center.
Các Constructor của BorderLayout:
New BorderLayout()
New BorderLayout(int hgap,int vgap)
Khác FlowLayout, bạn chỉ cần dùng constructor, sau đó các
component sẽ tự động thêm vào theo trái-phải, trên-dưới.
Trong BorderLayout, sau khi setLayout, với mỗi component
bạn phải qui định vị trí (north, east, west, south, center)
Ví dụ, để thêm một thành phần vào vùng North, bạn sử dụng
cú pháp sau:
- Button b1=new Button("North Button"); // khai báo
thành phần
setLayout(new BorderLayout()); // thiết lập layout
add(b1,BorderLayout.NORTH); // thêm thành phần vào
layout
Các thành phần vẫn giữ nguyên vị trí tương đối của chúng kể
cả khi container bị thay đổi kích thước. Cái này hoàn toàn
khác với FlowLayout. Nếu bạn thử thay đổi kích thước Frame
trong bài trước, bạn sẽ thấy các component thay đổi vị trí. Các
thành phần được đặt trong vùng North, South được dàn nằm
ngang trong khi đó các thành phần đặt trong vùng East và
West lại được dàn thẳng đứng. Các thành phần được đặt trong
vùng Center sẽ được dàn đều vào những khu vực nằm giữa
của container.
- Như trong phần trước, chúng ta có nói đến việc trong 1
chương trình chúng ta thường phải áp dụng nhiều
Layout. Các Layout này kết hợp với nhau trên cùng một
Container và cùng xuất hiện một lần. Tuy nhiên, đôi
khi chúng ta có nhu cầu mỗi lần chỉ một layout xuất
hiện.
- anelTwo.setLayout(new GridLayout(2,1));
Panel chính sẽ chứa những panel này. Chúng ta thiết lập layout của
panel chính là Cardlayout như sau:
CardLayout card=new CardLayout();
panelMain.setLayout(card);
Bước kế tiếp là thêm các panel khác vào panel chính:
panelMain.add("Red Panel", panelOne);
panelMain.add("Blue Panel", panelTwo);
Phương thức add() sử dụng hai tham số. Tham số đầu tiên là một
String làm nhãn của panel và tham số thứ hai là tên đối tượng Panel.
- GridLayout trợ giúp việc chia container vào trong ô
lưới. Các thành phần được đặt trong các ô giao của dòng
và cột. Mỗi lưới nên chứa ít nhất một thành phần. Một
lưới được sử dụng khi tất cả các thành phần có cùng kích
thước.
GridLayout được tạo như sau:
Gridlayout g1=new GridLayout(4,3);
4 là số dòng và 3 là số cột.
- Thật sự không quá phức tạp, tuy nhiên bạn cần chú ý cẩn thận.
Cũng như GridLayout, bề mặt của Container sẽ gồm nhiều ô
lưới.
Tuy nhiên các việc đặt các component vào ô lưới trong
GridBagLayout không phải theo kiểu mỗi component một ô
mà là mỗi component có thể đặt trên nhiều ô.
GridBagLayout phải kết hợp với
GridBagLayoutConstraints
Cả hai đều là Class.
Đại khái Class thứ nhất giống như một qui định chung, chỉ ra
rằng ta sẽ sử dụng một kiểu Layout theo kiểu ô lưới nhưng
mỗi component có thể đặt trên nhiều ô.
Class thứ hai dùng để chỉ ra những qui định cụ thể cho các
component được xếp đặt thông qua class thứ nhất.
- Trình tự thông thường sẽ gồm những bước:
1 Tạo một GridBagLayout object
2 Tạo một GridBagConstraints object
3 Thiết lập GridBagLayout object như layout manager cho
container mà bạn đang thao tác.
4 Qui định các constraints, nói cách khác qui định các chi tiết
ngang,dọc, vị trí...
5 Gọi method setConstraints() của lớp GridBagLayout, trong
method này có 2 tham số là component bạn muốn thao tác và
Constraints mà bạn qui định trong bước 4 ở trên.
6 Gọi add() method của lớp Container để thêm component bạn
vừa qui định trên vào Container.
7 Tiếp tục từ bước số 4 cho mỗi component
Lưu ý là bắt đầu từ bước 4, bạn phải thao tác với từng
component.
- weightx, weighty: Chỉ ra sự phân phối của khoảng trống
trong GridBagLayout. Giá trị mặc định cho các biến này là 0.
Gridwidth, gridheight :Chỉ ra số lượng các ô (cell) chiều
ngang và chiều dọc trong vùng hiển thị của một thành phần.
ipadx, ipady :Chỉ ra lượng làm thay đổi chiều cao và chiều
rộng tối thiểu của thành phần. Nó sẽ thêm 2*ipadx vào chiều
rộng tối thiểu và 2*ipady vào chiều cao tối thiểu của thành
phần. Giá trị mặc định cho cả hai là 0.
anchor :Chỉ ra cách xắp xếp các thành phần trong cell. Mặc
định sẽ đặt vào giữa cell. Các thành viên dữ liệu tĩnh (static)
sau đây có thể được sử dụng: GridBagConstraints.NORTH
- gridx, gridy :Chỉ ra vị trí cell sẽ đặt thành phần. Khi
thiết lập giá trị của gridx là
‘GridbagConstraints.RELATIVE’ thì thành phần được
thêm sẽ nằm ở vị trí bên phải của thành phần cuối cùng.
fill :Chỉ ra cách mà một thành phần được bố trí vào cell
thế nào nếu như cell lớn hơn thành phần. Mặc định là
kích thước thành phần không thay đổi.
- GridBagConstraints.NONE :Mặc định, không làm thay
đổi kích thước của thành phần.
GridBagConstraints.HORIZONTAL :Tăng chiều rộng
của thành phần theo chiều ngang (HORIZONTAL) để
làm cho thành phần khớp với chiều ngang.
GridBagConstraints.VERTICAL :Tăng chiều cao của
thành phần theo chiều đứng (VERTICAL) để làm cho
thành phần khớp với chiều dọc.
GridBagConstraints.BOTH :Tăng chiều rộng, chiều cao
của thành phần theo cả chiều ngang và chiều dọc.
insets :Xác định khoảng cách top, buttom, left và right
giữa các thành phần. Mặc định là 0.
- Q&A
nguon tai.lieu . vn