WaitDialog.java
001 /*
002  *  WaitDialog.java
003  *
004  *  Copyright (c) 1995-2012, The University of Sheffield. See the file
005  *  COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
006  *
007  *  This file is part of GATE (see http://gate.ac.uk/), and is free
008  *  software, licenced under the GNU Library General Public License,
009  *  Version 2, June 1991 (in the distribution as file licence.html,
010  *  and also available at http://gate.ac.uk/gate/licence.html).
011  *
012  *  Valentin Tablan, 12/07/2000
013  *
014  *  $Id: WaitDialog.java 17612 2014-03-10 08:51:17Z markagreenwood $
015  */
016 
017 package gate.swing;
018 
019 import java.awt.BorderLayout;
020 import java.awt.Component;
021 import java.awt.Frame;
022 
023 import javax.swing.Box;
024 import javax.swing.Icon;
025 import javax.swing.JLabel;
026 import javax.swing.JPanel;
027 import javax.swing.JWindow;
028 
029 /**
030  * A small window used to show messages to the user during processing.
031  * This component is intended as a nicer alternative
032  * to a status bar/progress bar.
033  * The window has its own thread for updating the animated pictures displayed.
034  *
035  */
036 @SuppressWarnings("serial")
037 public class WaitDialog extends JWindow implements Runnable {
038 
039   /**    *
040    */
041   Box centerBox;
042 
043   /**    */
044   public WaitDialog(Frame frame, String title) {
045     super(frame);
046     //this.icon = new ImageIcon(ClassLoader.getSystemResource(
047     //            "gate/resources/img/working"));
048     // use the cached version from MainFrame
049     this.icon = gate.gui.MainFrame.getIcon("working");
050     this.frame = frame;
051     try  {
052       jbInit();
053       pack();
054     }
055     catch(Exception ex) {
056       ex.printStackTrace();
057     }
058   }
059 
060   /**
061    * Shows the window containing labels for the texts provided as attributes.
062    *
063    @param texts
064    */
065   public synchronized void showDialog(String[] texts) {
066     centerBox.removeAll();
067 
068     for(int i =0; i < texts.length; i++){
069       centerBox.add(new JLabel(texts[i]));
070     }
071 
072     centerBox.validate();
073     pack();
074 /*
075     Point loc = frame.getLocation();
076     loc.move(frame.getSize().width - getSize().width / 2 ,
077              frame.getSize().height - getSize().height /2 );
078     setLocation(loc);
079 */
080     stop = false;
081     Thread thread = new Thread(Thread.currentThread().getThreadGroup(),
082                                this,
083                                "WaitDialog1");
084     thread.setPriority(Thread.MAX_PRIORITY);
085     thread.start();
086     setVisible(true);
087   }
088 
089   /**
090    * Shows the window containing the components provided as attributes.
091    *
092    @param components
093    */
094   public synchronized void showDialog(Component[] components) {
095     centerBox.removeAll();
096     for(int i =0; i < components.length; i++){
097       centerBox.add(components[i]);
098     }
099     centerBox.validate();
100     pack();
101 /*
102     Point loc = frame.getLocation();
103     setLocation(loc.x + (frame.getSize().width - getSize().width) / 2 ,
104                 loc.y + (frame.getSize().height - getSize().height) /2);
105 */
106     stop = false;
107     Thread thread = new Thread(Thread.currentThread().getThreadGroup(),
108                                this,
109                                "WaitDialog2");
110     thread.setPriority(Thread.MAX_PRIORITY);
111     thread.start();
112     setVisible(true);
113   }
114 
115   /**    */
116   void jbInit() throws Exception {
117     JPanel centerPanel = new JPanel();
118     centerBox = Box.createVerticalBox();
119     centerPanel.setLayout(borderLayout1);
120     //centerPanel.setBorder(new LineBorder(Color.darkGray, 2));
121 //    centerPanel.setBackground(Color.white);
122 //    centerBox.setBackground(Color.white);
123     picture = new JLabel(icon);
124     picture.setOpaque(false);
125     centerPanel.add(centerBox, BorderLayout.CENTER);
126     centerPanel.add(picture, BorderLayout.WEST);
127     centerPanel.add(Box.createVerticalStrut(5), BorderLayout.NORTH);
128     centerPanel.add(Box.createVerticalStrut(5), BorderLayout.SOUTH);
129     centerPanel.add(Box.createHorizontalStrut(8), BorderLayout.EAST);
130     getContentPane().add(centerPanel, BorderLayout.CENTER);
131     centerPanel.setOpaque(false);
132   }
133 
134   /**
135    * Hides the window.
136    *
137    */
138   public void goAway() {
139     stop = true;
140   }
141 
142   /**    *
143    */
144   @Override
145   public void run() {
146     while(!stop){
147       try{
148         Thread.sleep(300);
149         centerBox.validate();
150         pack();
151         /*
152         Point loc = frame.getLocation();
153         setLocation(loc.x + (frame.getSize().width - getSize().width) / 2 ,
154                     loc.y + (frame.getSize().height - getSize().height) /2);
155         */
156         picture.paintImmediately(picture.getVisibleRect());
157       }catch(InterruptedException ie){}
158     }
159     this.setVisible(false);
160   }
161 
162 
163   boolean stop = false;
164 
165   BorderLayout borderLayout1 = new BorderLayout();
166 
167   Frame frame;
168 
169   JLabel picture;
170 
171   Icon icon;
172 
173 // class WaitDialog