pack() vs setSize()
pack() (từ lớp Window) tự động tính toán kích thước cửa sổ sao cho tất cả component con hiển thị ở kích thước ưu tiên (preferredSize). setSize() ép buộc kích thước cố định.
Tại sao nên dùng pack()?
- Layout manager lo liệu kích thước component,
pack()tôn trọng điều đó. - Tự động thích ứng cross-platform (font, DPI, look-and-feel khác nhau).
- Tránh hard-code kích thước gây truncation hoặc khoảng trống thừa.
Ví dụ
import java.awt.*;
import javax.swing.*;
public class PackMethodDemo extends JFrame {
public PackMethodDemo() {
setTitle("Demo pack() method");
setLayout(new FlowLayout());
// Thêm 5 button
for (int i = 1; i <= 5; i++) {
add(new JButton("Button " + i));
}
pack(); // Tự động resize frame vừa đủ chứa 5 button
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(PackMethodDemo::new);
}
}
Kết quả

Lưu ý: Gọi pack() sau khi thêm tất cả component và trước setVisible(true). Nếu gọi setSize() sau pack(), kích thước sẽ bị ghi đè.