/*
* (C) 2004 - Geotechnical Software Services
*
* This code is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This code is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, write to the Free
* Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
* MA 02111-1307, USA.
*/
//package no.geosoft.cc.ui;
import java.net.URL;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.Timer;
import javax.swing.JWindow;
/**
* Class representing an application splash screen.
* <p>
* Typical usage:
* <pre>
* SplashScreen splashScreen = new SplashScreen ("/com/company/splash.jpg");
* splashScreen.open (3000);
* </pre>
*
* @author <a href="mailto:jacob.dreyer@geosoft.no">Jacob Dreyer</a>
*/
public class SplashScreen extends JWindow
{
private Image image_;
private int x_, y_, width_, height_;
/**
* Create a new splash screen object of the specified image.
* The image file is located and referred to through the deployment, not
* the local file system; A typical value might be "/com/company/splash.jpg".
*
* @param imageFileName Name of image file resource to act as splash screen.
*/
public SplashScreen (String imageFileName)
{
super (new Frame());
try {
Toolkit toolkit = Toolkit.getDefaultToolkit();
URL imageUrl = getClass().getResource (imageFileName);
image_ = toolkit.getImage (imageUrl);
MediaTracker mediaTracker = new MediaTracker (this);
mediaTracker.addImage (image_, 0);
mediaTracker.waitForID (0);
width_ = image_.getWidth (this);
height_ = image_.getHeight (this);
Dimension screenSize = toolkit.getScreenSize();
x_ = (screenSize.width - width_) / 2;
y_ = (screenSize.height - height_) / 2;
}
catch (Exception exception) {
exception.printStackTrace();
image_ = null;
}
}
/**
* Open the splash screen and keep it open for the specified duration
* or until close() is called explicitly.
*/
public void open (int nMilliseconds)
{
if (image_ == null) return;
Timer timer = new Timer (Integer.MAX_VALUE, new ActionListener() {
public void actionPerformed (ActionEvent event) {
((Timer) event.getSource()).stop();
close();
};
});
timer.setInitialDelay (nMilliseconds);
timer.start();
setBounds (x_, y_, width_, height_);
setVisible (true);
}
/**
* Close the splash screen.
*/
public void close()
{
setVisible (false);
dispose();
}
/**
* Paint the splash screen window.
*
* @param graphics The graphics instance.
*/
public void paint (Graphics graphics)
{
System.out.println ("paint");
if (image_ == null) return;
graphics.drawImage (image_, 0, 0, width_, height_, this);
}
}
|