GridLayout đặt tất cả thành phần trong lưới chữ nhật, chia thành các hình chữ nhật bằng nhau, mỗi thành phần nằm trong một ô. GridBagLayout là layout manager linh hoạt căn chỉnh thành phần dọc và ngang mà không yêu cầu các thành phần cùng kích thước. Mỗi đối tượng GridBagLayout duy trì một lưới ô động, mỗi thành phần chiếm một hoặc nhiều ô gọi là Component display area.
GridLayout
Sắp xếp thành phần trong lưới chữ nhật. Mỗi ô có cùng kích thước. Thành phần đặt theo cột và hàng. GridLayout(int rows, int columns) nhận hai tham số: hàng và cột.
Ví dụ GridLayout
import java.awt.*;
import javax.swing.*;
public class GridLayoutTest{
GridLayoutTest() {
JFrame frame = new JFrame("GridLayout Test");
JButton button1, button2, button3, button4;
button1 = new JButton("Button 1");
button2 = new JButton("Button 2");
button3 = new JButton("Button 3");
button4 = new JButton("Button 4");
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.add(button4);
frame.setLayout(new GridLayout(2,2));
frame.setSize(300,300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args) {
new GridLayoutTest();
}
}
GridBagLayout
Mở rộng khả năng của GridLayout. Đặt thành phần trong từng ô riêng lẻ và cho phép thành phần trải qua nhiều cột hoặc hàng. Để dùng GridBagLayout, tạo đối tượng GridBagConstraints và điền các thuộc tính phù hợp.
Ví dụ GridBagLayout
import javax.swing.*;
import java.awt.*;
public class GridBagLayoutTest extends JFrame {
public GridBagLayoutTest() {
setTitle("GridBagLayout Test");
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 5;
gbc.gridy = 0;
add(new JButton("Button1"), gbc);
gbc.gridx = 0;
gbc.gridy = 5;
add(new JButton("Button2"), gbc);
gbc.gridx = 2;
gbc.gridy = 4;
add(new JButton("Button3"), gbc);
}
public static void main(String[] args) {
GridBagLayoutTest gbcTest = new GridBagLayoutTest();
gbcTest.setSize(300,300);
gbcTest.setVisible(true);
gbcTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Bảng so sánh tóm tắt
| Đặc điểm | GridLayout | GridBagLayout |
|---|---|---|
| Kích thước ô | Bằng nhau (equal) | Khác nhau (flexible) |
| Trải cột/hàng (span) | Không | Có (gridwidth, gridheight) |
| Căn chỉnh | Tự động căn giữa ô | Linh hoạt (anchor, fill, weightx, weighty) |
| Độ phức tạp | Đơn giản | Phức tạp (cần GridBagConstraints) |
| Phù hợp | Form đơn giản, ma trận nút bấm | Form phức tạp, layout tùy biến cao |
GridBagConstraints quan trọng: gridx, gridy, gridwidth, gridheight, fill, anchor, weightx, weighty, insets, ipadx, ipady.