JWindow là container có thể hiển thị bất cứ đâu trên màn hình desktop. Nó không có thanh tiêu đề (title bar), các nút quản lý cửa sổ như JFrame.
JWindow chứa JRootPane làm con duy nhất. contentPane có thể là cha của các con của JWindow. Giống như JFrame, JWindow là top-level container khác, bản chất là JFrame không trang trí (undecorated). Không có thanh tiêu đề, menu cửa sổ, v.v. JWindow thường dùng làm màn hình chào (splash screen) hiển thị khi ứng dụng khởi động và tự biến mất sau vài giây.
Ví dụ minh họa
import javax.swing.*;
import java.awt.*;
public class CreateSplashScreen extends JWindow {
Image splashScreen;
ImageIcon imageIcon;
public CreateSplashScreen() {
// Tải hình ảnh (điều chỉnh đường dẫn phù hợp)
splashScreen = Toolkit.getDefaultToolkit().getImage("logo.jpg");
// Tạo ImageIcon từ Image
imageIcon = new ImageIcon(splashScreen);
// Thiết lập kích thước JWindow theo kích thước ảnh
setSize(imageIcon.getIconWidth(), imageIcon.getIconHeight());
// Lấy kích thước màn hình
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
// Tính toạ độ x, y để JWindow nằm giữa màn hình
int x = (screenSize.width - getSize().width) / 2;
int y = (screenSize.height - getSize().height) / 2;
// Đặt vị trí mới cho JWindow
setLocation(x, y);
// Hiển thị JWindow
setVisible(true);
}
// Vẽ ảnh lên JWindow
public void paint(Graphics g) {
super.paint(g);
g.drawImage(splashScreen, 0, 0, this);
}
public static void main(String[] args) {
CreateSplashScreen splash = new CreateSplashScreen();
try {
// Hiển thị splash screen 10 giây rồi đóng
Thread.sleep(10000);
splash.dispose();
} catch(Exception e) {
e.printStackTrace();
}
}
}
Kết quả đầu ra
Một cửa sổ không viền hiển thị hình ảnh logo ở giữa màn hình trong 10 giây, sau đó tự động đóng.
Lưu ý thực tế
- Đường dẫn ảnh trong ví dụ (
"logo.jpg") cần điều chỉnh theo vị trí thực tế của file. - Trong ứng dụng thật, splash screen thường hiển thị trong khi khởi tạo tài nguyên nặng (kết nối DB, load config), không phải sleep cố định.
- Có thể dùng
SplashScreenclass (Java 6+) cho splash screen sớm hơn, trước khi JVM khởi tạo hoàn toàn.