package com.jstatcom.component;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JWindow;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.border.BevelBorder;
/**
* A SplashScreen for use when starting applications. The splash screen contains
* a title, and image and a status bar. The status bar can display messages
* as well as the percentage of completion using a progress bar.
* @author Tony Johnson
* @version $Id: SplashScreen.java,v 1.3 2005/09/07 10:24:06 kraetzig Exp $
*/
public class SplashScreen extends JWindow {
private JProgressBar progress;
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();
}
}
/**
* Create a new SplashScreen
* @param coolPicture The image to display in the splash screen
* @param initialMessage The initial message to display in the progress area
* @param title The title of the splash screen window, may be null
*/
public SplashScreen(
Icon coolPicture,
String initialMessage,
String title) {
// Create a JPanel so we can use a BevelBorder
JPanel panelForBorder = new JPanel(new BorderLayout());
panelForBorder.setBackground(Color.white);
panelForBorder.setLayout(new BorderLayout());
panelForBorder.add(new JLabel(coolPicture), BorderLayout.CENTER);
if (title != null)
panelForBorder.add(
new JLabel(title, SwingConstants.CENTER),
BorderLayout.NORTH);
progress = new JProgressBar(0, 100);
progress.setStringPainted(true);
progress.setString(initialMessage);
panelForBorder.add(progress, BorderLayout.SOUTH);
panelForBorder.setBorder(new BevelBorder(BevelBorder.RAISED));
getContentPane().add(panelForBorder);
}
/**
* Close the splash screen and free any resources associated with it.
* This method is thread safe and can be called from any thread.
*/
public void close() {
if (isVisible()) {
SwingUtilities.invokeLater(new CloseSplashScreen());
}
}
/**
* Show or hide the splash screen.
* @param show True to display the splash screen
*/
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);
}
/**
* Updates the status bar. This method is thread safe and can be called from
* any thread.
* @param message The message to display
* @param percent The percentage towards completion
*/
public void showStatus(String message, int percent) {
if (isVisible()) {
SwingUtilities.invokeLater(new UpdateStatus(message, percent));
}
}
}
Ads help maintain this website.