JavaのJWindowを使ってスプラッシュ画面を実装する方法
JWindowは、デスクトップ上の任意の位置に表示できるコンテナです。JFrameと異なり、タイトルバーやウィンドウ管理ボタンなどの装飾要素を持ちません。
JWindowは、唯一の子クラスとしてJRootPaneを含んでいます。そのcontentPaneが、JWindowに追加される子コンポーネントの親となります。JFrameと同様に、JWindowもトップレベルコンテナの一つであり、「装飾のない(undecorated)JFrame」と考えることができます。タイトルバーやウィンドウメニューといった機能は備えていません。
この特性を活かすと、JWindowはスプラッシュ画面として利用できます。アプリケーション起動時に一度だけ表示され、数秒後に自動的に消えるロゴ画面などを作成するのに適しています。
コード例
以下は、指定した画像を画面中央に表示し、10秒後に自動的に閉じるスプラッシュ画面の実装例です。
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;
// JWindowの表示位置を設定
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 {
// JWindowを10秒間表示してから閉じる
Thread.sleep(10000);
splash.dispose();
} catch (Exception e) {
e.printStackTrace();
}
}
}実行結果

実装のポイント
- 画像サイズへの自動調整: ImageIconの幅と高さを取得してsetSize()に渡すことで、画像にぴったり合ったウィンドウサイズになります。
- 画面中央への配置: 画面全体のサイズからウィンドウサイズを引いて半分にすることで、x・y座標を算出し、setLocation()で中央に配置できます。
- paint()メソッドのオーバーライド: drawImage()を使って読み込んだ画像をウィンドウ上に描画します。
- 自動的に閉じる仕組み: Thread.sleep()で指定時間待機した後、dispose()を呼び出してウィンドウを破棄し、リソースを解放します。
なお、実際のアプリケーションでは、Swingのjavax.swing.Timerを使って一定時間後に閉じるようにすると、イベントディスパッチスレッドとの整合性が保たれ、より安全な実装になります。
-
JavaのBorderFactoryを使ってさまざまなボーダー(境界線)を実装する方法
BorderFactoryは、Javaでさまざまな種類のボーダー(境界線)を生成するためのファクトリクラスです。このクラスを利用することで、Swingコンポーネントの外枠を簡単かつ柔軟にカスタマイズできます。ボーダーの種類BevelBorder:浮き上がった(RAISED)または沈み込んだ(LOWERED)斜めのエッジを描画します。ボタンなどに立体感を持たせたい場合に有効です。EmptyBorder:何も描画しませんが、余白としてスペースを確保します。コンポーネント間の間隔調整に役立ちます。EtchedBorder:LOWERED(沈み込み)タイプはくぼんだ矩形のような外観になり、RAISED
-
JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説
JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー