Mega Code Archive

 
Categories / Java / Swing JFC
 

Class representing an application splash screen

/*  * (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);   } }