Splash.java
001 /*
002  *  Copyright (c) 1995-2012, The University of Sheffield. See the file
003  *  COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
004  *
005  *  This file is part of GATE (see http://gate.ac.uk/), and is free
006  *  software, licenced under the GNU Library General Public License,
007  *  Version 2, June 1991 (in the distribution as file licence.html,
008  *  and also available at http://gate.ac.uk/gate/licence.html).
009  *
010  *  Valentin Tablan 28/01/2001
011  *
012  *  $Id: Splash.java 17606 2014-03-09 12:12:49Z markagreenwood $
013  *
014  */
015 package gate.gui;
016 
017 import java.awt.*;
018 import java.awt.event.MouseAdapter;
019 import java.awt.event.MouseEvent;
020 
021 import javax.swing.*;
022 import javax.swing.border.EtchedBorder;
023 
024 /**
025  * A splash screen.
026  * A splash screen is an image that appears on the screen while an application
027  * initialises. The implementation uses a {@link java.awt.Window} (a Frame with
028  * no decorations such as bar or buttons) and can either display a JComponent
029  * as content or an image.
030  * When clicked it is hidden.
031  */
032 @SuppressWarnings("serial")
033 public class Splash extends JWindow {
034 
035   /**
036    * Constructor from owner, GraphicsConfiguration and content.
037    */
038   public Splash(Window owner, GraphicsConfiguration gc, final JComponent content) {
039     super(owner, gc);
040     getContentPane().setLayout(new BorderLayout());
041     content.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
042     getContentPane().add(content, BorderLayout.CENTER);
043     content.addMouseListener(new MouseAdapter() {
044       @Override
045       public void mouseClicked(MouseEvent e) {
046         // when the content pane is clicked, hide it
047         setVisible(false);
048       }
049     });
050     validate();
051     pack();
052   }
053 
054   public Splash(Window owner,  JComponent content) {
055     this(owner, null, content);
056   }
057   
058   /**
059    * Constructor from image.
060    */
061   public Splash(String imageResourcePath) {
062     this(null, imageResourcePath);
063   }
064 
065   /**
066    * Constructor from content.
067    */
068   public Splash(JComponent content) {
069     this(null, content);
070   }
071 
072   /**
073    * Constructor from owner and image.
074    */
075   public Splash(Window owner, String imageResourcePath) {
076     this(owner,
077         new JLabel(new ImageIcon(Splash.class.getResource(imageResourcePath))));
078   }
079 
080   /**
081    * Displays the splash screen centered in the owner's space or centered on
082    * the screen if no owner or owner not shown.
083    */
084   public void showSplash(){
085     Dimension ownerSize;
086     Point ownerLocation;
087     Rectangle screenBounds = getGraphicsConfiguration().getBounds();
088     if(getOwner() == null){
089       ownerSize = screenBounds.getSize();
090       ownerLocation = screenBounds.getLocation();
091     }else{
092       ownerSize = getOwner().getSize();
093       ownerLocation = getOwner().getLocation();
094       if(ownerSize.height == ||
095          ownerSize.width == ||
096          !getOwner().isVisible()){
097         ownerSize = screenBounds.getSize();
098         ownerLocation = screenBounds.getLocation();        
099       }
100     }
101     //Center the window
102     Dimension frameSize = getSize();
103     if (frameSize.height > ownerSize.height)
104       frameSize.height = ownerSize.height;
105     if (frameSize.width > ownerSize.width)
106       frameSize.width = ownerSize.width;
107     setLocation(ownerLocation.x + (ownerSize.width - frameSize.width2,
108                 ownerLocation.y + (ownerSize.height - frameSize.height2);
109     super.setVisible(true);
110   }
111 }