フレームレス
スプラッシュウィンドウの作成
アプリケーションやアプレットのFrameクラスや、Dialogクラスで作成したウィンドウは
必ずフレームやタイトルバーによる「窓の境界」がありました
アプリケーションの起動時や、ゲームなどの製作過程で
枠のないスプラッシュウィンドウを表現したいときがあります
ここでは、そのようなフレームレスなウィンドウの作成を説明します
ウィンドウ単体の状態にフレームなどのピアを生成するのがFrameクラスです
つまり、フレームない状態はFrameクラスの親クラスの状態です
FrameクラスのスーパークラスはWindowクラスであるということは説明しましたね
ということは、Frameのないウィンドウを生成するにはWindowクラスのインスタンスを使用します
Windowクラスのコンストラクタは次のようになっています
public Window( Frame parent )
parentには、メインアプリケーションのフレームを渡します
Frameクラスなどと同様に、初期状態では表示されません
スプラッシュウィンドウの場合、フレームの枠がありません
そのため、出現時に画面の一番手前に表示されなければなりませんね
ウィンドウを画面の一番手前に表示するには、Windowクラスのshow()メソッドを
もしくはtoFront()メソッドを使用します
public void show()
public void toFront()
show()メソッドは、ウィンドウが表示されていなければ表示します(setVisible(true)と同じ)
ウィンドウが表示されている場合に限り、一番手前に表示します
toFront()メソッドは、ウィンドウを手前に表示する機能のみが保証されています
一般的に、ウィンドウを最前面に表示される場合show()の後toFront()を呼び出します
この過程を踏むことで、確実にウィンドウを手前に表示させることができます
因みにですが、ウィンドウを一番背後に表示する場合は同クラスのtoBack()メソッドを使用します
public void toBack()
ウィンドウをスタックの最後尾に配置し、表示されているほかのウィンドウをそれに応じて調整します
画面の中央にウィンドウを表示する場合は、前回説明した方法を用います
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
/* <applet code="App56.class" width="300"height="300">
</applet>
*/
public class App56 extends Applet implements ActionListener , Runnable {
Toolkit tk = getToolkit();
Dimension dim;
Window win;
public void init() {
setBackground(Color.white);
dim = tk.getScreenSize();
setLayout(new GridLayout(1,1));
Button but = (Button)add(new Button("スプラッシュウィンドウ"));
but.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
Thread th = new Thread(this);
th.start();
}
public void run() {
synchronized(this) {
Label lb = new Label("Kitty on your lap");
lb.setForeground(Color.red);
lb.setFont(new Font("Serif" , Font.ITALIC , 30));
win = new Window(new Frame());
win.setLayout(new FlowLayout(FlowLayout.CENTER));
win.setSize(400 , 400);
win.setBackground(Color.black);
win.add(lb);
win.setLocation(dim.width / 2 - 200 , dim.height / 2 - 200);
win.show();
win.toFront();
try { Thread.sleep(5000); }
catch (Exception e) { }
finally { win.dispose(); }
}
}
}
ボタンを押すと、フレームのないウィンドウが表示されます
アプレットの場合だと、JVMのセキュリティ上アプレットウィンドウである警告が表示されます
スレッドによって、5秒間待機し、その後にウィンドウは自動的に破棄されます
スレッドは同期をとっているので、同じオブジェクトが連続で実行されることはありません
ボタンを二回押すと、スプラッシュウィンドウが消えてから待機していたスレッドが実行されます