// Charles A. Loomis, Jr., and University of California, Santa Cruz,
// Copyright (c) 2000
package org.freehep.swing.graphics;
import java.awt.Color;
import java.net.URL;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JLabel;
/**
* Displays a particular image in a separate frame for a given period
* of time, then destroys the frame.
*
* @author Charles Loomis
* @version $Id: SplashFrame.java 8584 2006-08-10 23:06:37Z duns $ */
public class SplashFrame
extends JDialog
implements Runnable {
/**
* The time in milliseconds to wait before disposing of the
* SplashScreen. */
private int sleepTime;
/**
* The default time (in milliseconds) to wait before disposing of
* the SplashScreen. */
final private int defaultTime = 3000;
public SplashFrame(String title, URL imageURL) {
// Set the title.
setTitle(title);
// Make this window dispose of itself if it is closed.
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
// Make a JLabel to hold the image.
ImageIcon image = new ImageIcon(imageURL);
JLabel label = new JLabel(image);
// Put a black border around the label.
label.setBorder(BorderFactory.createLineBorder(Color.black,3));
// Make this the content pane.
setContentPane(label);
// Pack this frame and make it non-resizable.
pack();
setResizable(false);
setLocationRelativeTo(null);
}
/**
* Cause this frame to disappear after the given delay (in ms). */
public void disposeAfter(int millis) {
sleepTime = Math.max(0,millis);
// Start the thread.
Thread thread = new Thread(this);
thread.start();
}
/**
* Cause this frame to disappear after the default delay (3 s). */
public void disposeAfter() {
disposeAfter(defaultTime);
}
/**
* This routine just waits for the given time and then disposes of
* the SplashFrame. */
public void run() {
// Make it visible and move it to the front.
setVisible(true);
toFront();
try {
Thread.sleep(sleepTime);
} catch (InterruptedException e) {
}
this.dispose();
}
}