package helloagain.kanday;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JWindow;
import java.util.logging.Logger;

/**
 * プログラムのスプラッシュ画像を表示するためのウィンドウ。
 * 画像ファイルは、クラスローダによってリソースとして読み込まれる。
 * 画像ファイル名：splash.png (固定)
 * 画像ファイルを置くパス:本クラスと同じパッケージの場所。
 *
 * Created: Tue Jun 01 06:04:09 2004
 *
 * @author <a href="mailto:torutk@02.246.ne.jp">TAKAHASHI,Toru</a>
 * @version 1.0
 */
public class KandaySplash extends JWindow {

    /**
     * <code>KandaySplash</code>インスタンスを生成する。
     * コンストラクタ中でウィンドウのサイズ確定(pack)と表示位置の確定を
     * 行う。
     */
    public KandaySplash() {
        JPanel contentPane = new JPanel();
        contentPane.setLayout(new BorderLayout());
        contentPane.setBorder(BorderFactory.createLineBorder(Color.BLACK));
        setContentPane(contentPane);

        InputStream inStream = getClass().getResourceAsStream("splash.png");
        JLabel imageLabel = createImageLabel(inStream);
        try {
            if (inStream != null) {
                inStream.close();
            }
        } catch (IOException e) {
            // do nothing
        }
        contentPane.add(imageLabel, BorderLayout.CENTER);

        JLabel kandayLabel = new JLabel("Desktop Edition", JLabel.CENTER);
        getContentPane().add(kandayLabel, BorderLayout.SOUTH);
        pack();

        Toolkit toolkit = Toolkit.getDefaultToolkit();
        int screenWidth = toolkit.getScreenSize().width;
        int screenHeight = toolkit.getScreenSize().height;
        int x = screenWidth/2 - getWidth()/2;
        int y = screenHeight/2 - getHeight()/2;
        setLocation(x, y);

    }

    /**
     * 引数で指定したストリームから画像ファイルを読み込み、その画像を
     * 載せた<code>JLabel</code>を返却する。
     * 引数がnullの場合は、テキストを載せた<code>JLabel</code>を返却する。
     * 
     * @param inStream 画像データのストリーム。
     * @retrun JLabelのインスタンス
     */
    private final JLabel createImageLabel(final InputStream inStream) {
        JLabel imageLabel = null;
        if (inStream != null) {
            try {
                BufferedImage image = ImageIO.read(inStream);
                Icon icon = new ImageIcon(image);
                imageLabel = new JLabel(icon);
                return imageLabel;
            } catch (IOException e) {
            }
        }
        // 画像が生成できない場合、文字で代替
        Font font = new Font("Monospaced", Font.BOLD, 36);
        imageLabel = new JLabel("Java Hello Again");
        imageLabel.setFont(font);
        return imageLabel;
    }

    private static final String MYCLASS = KandaySplash.class.getName();
    private static Logger logger = Logger.getLogger(MYCLASS);
}
