'Prograss Bar'에 해당되는 글 1건

Splash Screen에 PrograssBar 만들기! :: 2007/03/25 22:18

한국 썬 개발자 네트워크  여기저기를 들쑤시고 다니던 도중에,
Splash Screen 에 대한 소스를 발견했습니다.

Splash Screen 이란, 어떤 프로그램을 처음 실행하였을 경우 로딩 시간이 길 경우를 대비하여 미리 이미지를 띄워 프로그램이 로딩 중이거나 로딩 상황을 알리는데 사용하는데요.

뭐 예를 들어 이클립스를 처음 실행하고자 하는 경우 다음과 같은 화면이 뜨죠.


사실 지금 캡쳐화면에선 보이지 않지만, 이미지 아래쪽에 PrograssBar가 떠서 로딩 상황을 알리죠.

그 소스에서는 그냥 이미지 한 가운데 사각형을 그리면서 색깔만 바꿔주는 예제였는데요,
제 입맛에 맞게 아래쪽에 PrograssBar 를 그려주는 걸로 바꿔 봤습니다.

소스는 다음과 같습니다.

import javax.swing.*;
import java.awt.*;
import java.util.*;

public class ExtendedSplash {

public static void main(String args[]) {

Runnable runner = new Runnable() {
 
  public void run() {
   // 생성된 Splash Screen을 반환한다.
   SplashScreen splash = SplashScreen.getSplashScreen();
       
   // Splash Image를 Graphics2D의 인스턴스로 받는다.
   Graphics2D g = splash.createGraphics();
           
   
// Splash 된 Image의 사이즈를 구한다.
   Dimension dim = splash.getSize();
   
   
// Image 하단에 그려질 PrograssBar 배경 사각형 그리기    
   g.setColor(Color.GRAY);
   
   
// (x좌표, y좌표: 그려질사각형의 높이만큼 뺀다, 너비, 높이)
   g.fillRect(0, dim.height - 20, dim.width, 20);
   
   // 현재 진행 상황에 맞춰 그려질 Prograss 사각형
   g.setColor(Color.GREEN);
 
   // i가 Splash Image의 너비에 다다를 때까지
   // 12에서 10은 그려질 사각형의 너비, 2는 사각형간의 간격이다.

   for (int i=0; i< dim.width; i += 12) {
    g.fillRect(i, dim.height - 20, 10, 20);
    splash.update();
   
    // 0.5 초의 간격으로 사각형을 그린다
    // 실제로 이 부분에 로딩에 따른 작업 간격을 설정해 주는 부분이다.

    try {
     Thread.sleep(500);  
    } catch (InterruptedException ignored) {
    }
   }

   
   JFrame frame = new JFrame("Splash Me2");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JLabel label = new JLabel("프로그램이 시작되었습니다~!", JLabel.CENTER);
   frame.add(label, BorderLayout.CENTER);
   frame.setSize(300, 95);
   frame.setVisible(true);
  }
};
     
EventQueue.invokeLater(runner);
}
}

실제로 중요한 부분은 굵은 글씨입니다.

워낙 간단한 소스라서 쉽게 이해 하실 줄로 믿습니다.

소스를 보면 Splash Screen으로 띄워 줄 이미지를 설정하는 부분이 없습니다.
이는 실행할 때 지정해 줘야 하는데요.
다음과 같이 실행하면 됩니다.

java -splash:MyImage.png ExtendedSplash

이것보다 보다 효과적인 방법은 manifest 파일로 관리하는 겁니다.
다음과 같은 manifest.mf 파일을 만듭니다.

Manifest-Version: 1.0
Main-Class: ExtendedSplash
SplashScreen-Image: MyImage.png

이렇게 만들어주고, 다음과 같이 jar 파일을 만들어 실행합니다.
jar -mcvf manifest.mf Splash.jar HelloSplash*.class MyImage.png
java -jar Splash.jar


Splash Screen 으로 사용 가능한 이미지 포멧은 png, jpg, gif 등이라고 명시하고 있네요.

이 소스로 제가 만든 Splash Screen 입니다.
이미지의 모델은 제 여친입니다. ^^땀

Splash Screen의 PrograssBar 가 꽉차게 되면 프로그램이 시작됩니다.



원래 이미지에 PrograssBar 크기만큼의 영역을 더 잡아보려고 삽질을 해봤으나,
부족한 저의 실력으론 힘들더군요.

아예 이미지 하단에 처음부터 PrograssBar의 여유영역을 만들어주는것도 좋을 듯 합니다.

그럼 유용하게 사용하세요~^^

2007/03/25 22:18 2007/03/25 22:18
Name
Password
Homepage
Secret