JWindow란 무엇인가?
JWindow는 사용자 데스크톱 화면 어느 위치에나 표시할 수 있는 컨테이너입니다. JFrame과 달리 제목 표시줄(title bar), 최소화·최대화·닫기 버튼과 같은 창 관리 요소가 없다는 것이 가장 큰 특징입니다.
JWindow는 유일한 자식으로 JRootPane을 포함하며, contentPane이 JWindow 내부의 모든 하위 컴포넌트의 부모 역할을 담당합니다. JFrame처럼 최상위 컨테이너(top-level container)에 해당하며, 쉽게 말해 '장식이 제거된(undecorated) JFrame'이라고 볼 수 있습니다.
이러한 특성 덕분에 JWindow는 스플래시 화면(splash screen)으로 활용하기에 매우 적합합니다. 애플리케이션이 실행될 때 잠깐 표시되었다가 몇 초 후 자동으로 사라지는 로고 또는 로딩 화면을 간단하게 구현할 수 있습니다.
예제 코드
import javax.swing.*;
import java.awt.*;
public class CreateSplashScreen extends JWindow {
Image splashScreen;
ImageIcon imageIcon;
public CreateSplashScreen() {
// 이미지 파일 불러오기
splashScreen = Toolkit.getDefaultToolkit().getImage("C:/Users/User/Desktop/Java/Answers/logo.jpg");
// Image 객체로부터 ImageIcon 생성
imageIcon = new ImageIcon(splashScreen);
// 이미지 크기에 맞춰 JWindow 크기 설정
setSize(imageIcon.getIconWidth(), imageIcon.getIconHeight());
// 현재 화면 크기 가져오기
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
// JWindow를 화면 중앙에 배치하기 위한 x 좌표 계산
int x = (screenSize.width - getSize().width) / 2;
// JWindow를 화면 중앙에 배치하기 위한 y 좌표 계산
int y = (screenSize.height - getSize().height) / 2;
// 새로운 위치 설정
setLocation(x, y);
// JWindow를 화면에 표시
setVisible(true);
}
// 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 {
// 10초 동안 표시된 후 자동으로 사라지도록 처리
Thread.sleep(10000);
splash.dispose();
} catch(Exception e) {
e.printStackTrace();
}
}
}코드 설명
- 이미지 로드: Toolkit의 getImage() 메서드로 로고 이미지를 불러온 뒤 ImageIcon으로 변환합니다.
- 크기 및 위치 지정: 이미지 크기에 맞게 윈도우 크기를 정하고, 화면 전체 크기를 기준으로 x, y 좌표를 계산해 화면 정중앙에 배치합니다.
- paint() 오버라이드: Graphics 객체의 drawImage() 메서드를 사용해 JWindow 위에 직접 이미지를 그립니다.
- 자동 종료: Thread.sleep()으로 10초간 대기한 후 dispose()를 호출하여 스플래시 화면을 닫습니다.
실행 결과
프로그램을 실행하면 화면 정중앙에 지정한 로고 이미지가 나타나고, 약 10초 후 자동으로 사라집니다. 대기 시간은 Thread.sleep()의 인자 값(밀리초 단위)을 조절하여 원하는 대로 변경할 수 있습니다.
