Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 JWindow로 스플래시 화면(Splash Screen) 구현하는 방법

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()의 인자 값(밀리초 단위)을 조절하여 원하는 대로 변경할 수 있습니다.

Java에서 JWindow로 스플래시 화면(Splash Screen) 구현하는 방법