| WaitDialog.java |
1 /*
2 * WaitDialog.java
3 *
4 * Copyright (c) 1998-2004, The University of Sheffield.
5 *
6 * This file is part of GATE (see http://gate.ac.uk/), and is free
7 * software, licenced under the GNU Library General Public License,
8 * Version 2, June 1991 (in the distribution as file licence.html,
9 * and also available at http://gate.ac.uk/gate/licence.html).
10 *
11 * Valentin Tablan, 12/07/2000
12 *
13 * $Id: WaitDialog.java,v 1.6 2004/07/21 17:10:09 akshay Exp $
14 */
15
16 package gate.swing;
17
18 import java.awt.*;
19
20 import javax.swing.*;
21
22 /**
23 * A small window used to show messages to the user during processing.
24 * This component is intended as a nicer alternative
25 * to a status bar/progress bar.
26 * The window has its own thread for updating the animated pictures displayed.
27 *
28 */
29 public class WaitDialog extends JWindow implements Runnable {
30
31 /** Debug flag
32 */
33 private static final boolean DEBUG = false;
34
35 /** *
36 */
37 Box centerBox;
38
39 /** */
40 public WaitDialog(Frame frame, String title) {
41 super(frame);
42 this.icon = new ImageIcon(ClassLoader.getSystemResource(
43 "gate/resources/img/working.gif"));
44 this.frame = frame;
45 try {
46 jbInit();
47 pack();
48 }
49 catch(Exception ex) {
50 ex.printStackTrace();
51 }
52 }
53
54 /**
55 * Shows the window containing labels for the texts provided as attributes.
56 *
57 * @param texts
58 */
59 public synchronized void showDialog(String[] texts) {
60 centerBox.removeAll();
61
62 for(int i =0; i < texts.length; i++){
63 centerBox.add(new JLabel(texts[i]));
64 }
65
66 centerBox.validate();
67 pack();
68 /*
69 Point loc = frame.getLocation();
70 loc.move(frame.getSize().width - getSize().width / 2 ,
71 frame.getSize().height - getSize().height /2 );
72 setLocation(loc);
73 */
74 stop = false;
75 Thread thread = new Thread(Thread.currentThread().getThreadGroup(),
76 this,
77 "WaitDialog1");
78 thread.setPriority(Thread.MAX_PRIORITY);
79 thread.start();
80 setVisible(true);
81 }
82
83 /**
84 * Shows the window containing the components provided as attributes.
85 *
86 * @param components
87 */
88 public synchronized void showDialog(Component[] components) {
89 centerBox.removeAll();
90 for(int i =0; i < components.length; i++){
91 centerBox.add(components[i]);
92 }
93 centerBox.validate();
94 pack();
95 /*
96 Point loc = frame.getLocation();
97 setLocation(loc.x + (frame.getSize().width - getSize().width) / 2 ,
98 loc.y + (frame.getSize().height - getSize().height) /2);
99 */
100 stop = false;
101 Thread thread = new Thread(Thread.currentThread().getThreadGroup(),
102 this,
103 "WaitDialog2");
104 thread.setPriority(Thread.MAX_PRIORITY);
105 thread.start();
106 setVisible(true);
107 }
108
109 /** */
110 void jbInit() throws Exception {
111 JPanel centerPanel = new JPanel();
112 Container content = getContentPane();
113 centerBox = Box.createVerticalBox();
114 centerPanel.setLayout(borderLayout1);
115 //centerPanel.setBorder(new LineBorder(Color.darkGray, 2));
116 // centerPanel.setBackground(Color.white);
117 // centerBox.setBackground(Color.white);
118 picture = new JLabel(icon);
119 picture.setOpaque(false);
120 centerPanel.add(centerBox, BorderLayout.CENTER);
121 centerPanel.add(picture, BorderLayout.WEST);
122 centerPanel.add(Box.createVerticalStrut(5), BorderLayout.NORTH);
123 centerPanel.add(Box.createVerticalStrut(5), BorderLayout.SOUTH);
124 centerPanel.add(Box.createHorizontalStrut(8), BorderLayout.EAST);
125 getContentPane().add(centerPanel, BorderLayout.CENTER);
126 centerPanel.setOpaque(false);
127 }
128
129 /**
130 * Hides the window.
131 *
132 */
133 public void goAway() {
134 stop = true;
135 }
136
137 /** *
138 */
139 public void run() {
140 while(!stop){
141 try{
142 Thread.sleep(300);
143 centerBox.validate();
144 pack();
145 /*
146 Point loc = frame.getLocation();
147 setLocation(loc.x + (frame.getSize().width - getSize().width) / 2 ,
148 loc.y + (frame.getSize().height - getSize().height) /2);
149 */
150 picture.paintImmediately(picture.getVisibleRect());
151 }catch(InterruptedException ie){}
152 }
153 this.setVisible(false);
154 }
155
156
157 boolean stop = false;
158
159 BorderLayout borderLayout1 = new BorderLayout();
160
161 Frame frame;
162
163 JLabel picture;
164
165 Icon icon;
166
167 } // class WaitDialog
168