package jas.util;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JWindow;
import javax.swing.SwingUtilities;
import javax.swing.border.BevelBorder;
public class SplashScreen extends JWindow
{
private JProgressBar progress;
// SplashScreen's constructor
public SplashScreen(ImageIcon CoolPicture, String message, String title)
{
// Create a JPanel so we can use a BevelBorder
JPanel PanelForBorder=new JPanel(new BorderLayout());
PanelForBorder.setLayout(new BorderLayout());
PanelForBorder.add(new JLabel(CoolPicture),BorderLayout.CENTER);
PanelForBorder.add(new JLabel(title,JLabel.CENTER),BorderLayout.NORTH);
progress = new JProgressBar(0,80);
progress.setStringPainted(true);
progress.setString(message);
PanelForBorder.add(progress,BorderLayout.SOUTH);
PanelForBorder.setBorder(new BevelBorder(BevelBorder.RAISED));
getContentPane().add(PanelForBorder);
}
public void setVisible(boolean show)
{
if (show)
{
pack();
// Plonk it on center of screen
Dimension WindowSize=getSize(),
ScreenSize=Toolkit.getDefaultToolkit().getScreenSize();
setBounds((ScreenSize.width-WindowSize.width)/2,
(ScreenSize.height-WindowSize.height)/2,WindowSize.width,
WindowSize.height);
}
super.setVisible(show);
}
public void showStatus(String CurrentStatus, int percent)
{
if (isVisible())
{
SwingUtilities.invokeLater(new UpdateStatus(CurrentStatus,percent));
}
}
public void close()
{
if (isVisible())
{
SwingUtilities.invokeLater(new CloseSplashScreen());
}
}
private class UpdateStatus implements Runnable
{
public UpdateStatus(String status, int pc)
{
message = status;
value = pc;
}
public void run()
{
progress.setValue(value);
progress.setString(message);
}
private String message;
private int value;
}
private class CloseSplashScreen implements Runnable
{
public void run()
{
setVisible(false);
dispose();
}
}
}