TITLE:JWindowを使ったSplash Screenの表示

JWindowを使ったSplash Screenの表示

編集者:Terai Atsuhiro~

作成日:2003-09-25
更新日:2024-02-02 (金) 11:52:27
  • category: swing folder: SplashScreen title: JWindowを使ったSplash Screenの表示 tags: [JWindow, JLabel] author: aterai pubdate: 2003-10-13T06:25:21+09:00 description: JWindowを使って、Splash Screenを表示します。 image: https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTTtxuiuuI/AAAAAAAAAk4/JhuyuS80C4M/s800/SplashScreen.png

概要

JWindowを使って、Splash Screenを表示します。以下のサンプルコードは、%JAVA_HOME%/demo/jfc/SwingSet2/src/SwingSet2.javaから引用改変したものです。

概要

JWindowを使って、Splash Screenを表示します。起動画面、Splash Windowといった呼び方もあるようです。 以下のサンプルコードは、%JAVA_HOME%/demo/jfc/SwingSet2/src/SwingSet2.java から引用改変したものです。

サンプルコード

#spanend
#spanadd
private JWindow splashScreen;
#spanend
#spanadd
private JLabel  splashLabel;
#spanend
#spanadd
public MainPanel() {
#spanend
  super();
  createSplashScreen(SPLASH_PATH);
  EventQueue.invokeLater(new Runnable() {
    @Override public void run() {
      showSplashScreen();
    }
  });
  // 実行時間の長い処理など
  try {
    Thread.sleep(3000);
  } catch (InterruptedException e) {
    System.out.println(e);
  }
  EventQueue.invokeLater(new Runnable() {
    @Override public void run() {
      showPanel();
      hideSplash();
    }
  });
#spanadd
}
#spanend

#spandel
//#screenshot
#spanend
#spanadd
public void createSplashScreen(String path) {
#spanend
  ImageIcon img = new ImageIcon(getClass().getResource(path));
  splashLabel = new JLabel(img);
  splashScreen = new JWindow(getFrame());
  splashScreen.getContentPane().add(splashLabel);
  splashScreen.pack();
  splashScreen.setLocationRelativeTo(null);
#spanadd
}
#spanend

#spandel
**サンプルコード [#raad4e3d]
#spanend
 private JWindow splashScreen;
 private JLabel  splashLabel;
 public void createSplashScreen(String path) {
   ImageIcon img = new ImageIcon(getClass().getResource(path));
   splashLabel  = new JLabel(img);
   splashScreen = new JWindow(getFrame());
   splashScreen.getContentPane().add(splashLabel);
   splashScreen.pack();
   splashScreen.setLocationRelativeTo(null);
 }
 public void showSplashScreen() {
   splashScreen.show();
 }
 public void hideSplash() {
   splashScreen.setVisible(false);
   splashScreen = null;
   splashLabel  = null;
 }
 //コンストラクタ
 public HogeHoge() {
   createSplashScreen("/resources/images/splash.png");
   SwingUtilities.invokeLater(new Runnable() {
     public void run() {
       showSplashScreen();
     }
   });
   //initializePanel();
   //といった初期化などの重い処理の代わりに、このサンプルではsleep
   try{
     Thread.sleep(3000);
   }catch(InterruptedException e) {
   	 System.out.println(e);
   }
   SwingUtilities.invokeLater(new Runnable() {
     public void run() {
       showPanel();
       hideSplash();
     }
   });
 }
#spanadd
public void showSplashScreen() {
#spanend
  splashScreen.setVisible(true);
#spanadd
}
#spanend

-&jnlp;
-&jar;
-&zip;
#spanadd
public void hideSplash() {
#spanend
  splashScreen.setVisible(false);
  splashScreen = null;
  splashLabel = null;
#spanadd
}
#spanend

#spandel
**解説 [#j7466f5a]
#spanend
#spandel
スプラッシュ・スクリーンのスレッド処理をSwingUtilities.invokeLaterメソッドを使って行っています。使用する画像は事前に用意しておいてください。上記のサンプルコードでは、クラスパスの通った場所にある ''/resources/images/splash.png'' を読み込んで表示するようになっています。
#spanend
#spanadd
public JFrame getFrame() {
#spanend
  return frame;
#spanadd
}
#spanend

#spandel
サンプルの画像は、[[n-Gen>http://www.n-generate.com/download.html]]を使って生成しています。
#spanend
#spanadd
public void showPanel() {
#spanend
  this.setPreferredSize(new Dimension(300, 200));
  frame.getContentPane().add(this);
  frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  frame.pack();
  frame.setLocationRelativeTo(null);
  frame.setVisible(true);
#spanadd
}
#spanend
#spanadd
View in GitHub: Java, Kotlin
Java SE 6 Mustang では、起動時にスプラッシュ・スクリーンとして表示する画像をコマンドラインで、またはmanifest.mfで指定したり、SplashScreenオブジェクトを生成してこれを表示したりすることができるようです。

解説

上記のサンプルコードでは、クラスパスの通った場所にある/resources/images/splash.pngを読み込んでスプラッシュ・スクリーン(起動画面)を表示しています。JWindowの表示、非表示は、イベントディスパッチスレッド(EDT)で行われるように、Runnableを作成しEventQueue.invokeLater()メソッドで実行しています。

コメント

  • -

参考リンク

コメント