1   /*
2    * Copyright (c) 2003 Sun Microsystems, Inc. All  Rights Reserved.
3    * 
4    * Redistribution and use in source and binary forms, with or without
5    * modification, are permitted provided that the following conditions
6    * are met:
7    * 
8    * -Redistributions of source code must retain the above copyright
9    *  notice, this list of conditions and the following disclaimer.
10   * 
11   * -Redistribution in binary form must reproduct the above copyright
12   *  notice, this list of conditions and the following disclaimer in
13   *  the documentation and/or other materials provided with the distribution.
14   * 
15   * Neither the name of Sun Microsystems, Inc. or the names of contributors
16   * may be used to endorse or promote products derived from this software
17   * without specific prior written permission.
18   * 
19   * This software is provided "AS IS," without a warranty of any kind. ALL
20   * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
21   * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
22   * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT
23   * BE LIABLE FOR ANY DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT
24   * OF OR RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR ITS
25   * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST
26   * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
27   * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY
28   * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN
29   * IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
30   * 
31   * You acknowledge that Software is not designed, licensed or intended for
32   * use in the design, construction, operation or maintenance of any nuclear
33   * facility.
34   */
35  
36  /*
37   * @(#)ProgressBarDemo.java 1.7 03/01/23
38   */
39  
40  
41  import javax.swing.*;
42  import javax.swing.event.*;
43  import javax.swing.text.*;
44  import javax.swing.border.*;
45  import javax.swing.colorchooser.*;
46  import javax.swing.filechooser.*;
47  import javax.accessibility.*;
48  
49  import java.awt.*;
50  import java.awt.event.*;
51  import java.beans.*;
52  import java.util.*;
53  import java.io.*;
54  import java.applet.*;
55  import java.net.*;
56  
57  /**
58   * JProgressBar Demo
59   *
60   * @version 1.7 01/23/03
61   * @author Jeff Dinkins
62   # @author Peter Korn (accessibility support)
63   */
64  public class ProgressBarDemo extends DemoModule {
65  
66      /**
67       * main method allows us to run as a standalone demo.
68       */
69      public static void main(String[] args) {
70      ProgressBarDemo demo = new ProgressBarDemo(null);
71      demo.mainImpl();
72      }
73  
74      /**
75       * ProgressBarDemo Constructor
76       */
77      public ProgressBarDemo(SwingSet2 swingset) {
78      // Set the title for this demo, and an icon used to represent this
79      // demo inside the SwingSet2 app.
80      super(swingset, "ProgressBarDemo", "toolbar/JProgressBar.gif");
81  
82      createProgressPanel();
83      }
84  
85      javax.swing.Timer timer;
86      Action loadAction;
87      Action stopAction;
88      JProgressBar progressBar;
89      JTextArea progressTextArea;
90      
91      public void createProgressPanel() {
92      getDemoPanel().setLayout(new BorderLayout());
93  
94      JPanel textWrapper = new JPanel(new BorderLayout());
95      textWrapper.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
96      textWrapper.setAlignmentX(LEFT_ALIGNMENT);
97      progressTextArea = new MyTextArea();
98      progressTextArea.getAccessibleContext().setAccessibleName(getString("ProgressBarDemo.accessible_text_area_name"));
99      progressTextArea.getAccessibleContext().setAccessibleName(getString("ProgressBarDemo.accessible_text_area_description"));
100     textWrapper.add(new JScrollPane(progressTextArea), BorderLayout.CENTER);
101 
102     getDemoPanel().add(textWrapper, BorderLayout.CENTER);
103 
104     JPanel progressPanel = new JPanel();
105     getDemoPanel().add(progressPanel, BorderLayout.SOUTH);
106 
107     progressBar = new JProgressBar(JProgressBar.HORIZONTAL, 0, text.length()) {
108         public Dimension getPreferredSize() {
109         return new Dimension(300, super.getPreferredSize().height);
110         }
111     };
112     progressBar.getAccessibleContext().setAccessibleName(getString("ProgressBarDemo.accessible_text_loading_progress"));
113 
114     progressPanel.add(progressBar);
115     progressPanel.add(createLoadButton());
116     progressPanel.add(createStopButton());
117     }
118 
119     public JButton createLoadButton() {
120     loadAction = new AbstractAction(getString("ProgressBarDemo.start_button")) {
121         public void actionPerformed(ActionEvent e) {
122         if(timer == null) {
123             loadAction.setEnabled(false);
124             stopAction.setEnabled(true);
125             timer = new javax.swing.Timer(18, createTextLoadAction());
126             timer.start();
127         }
128         }
129     };
130     return createButton(loadAction);
131     }
132 
133     public JButton createStopButton() {
134     stopAction = new AbstractAction(getString("ProgressBarDemo.stop_button")) {
135         public void actionPerformed(ActionEvent e) {
136         if(timer != null) {
137             timer.stop();
138             timer = null;
139         }
140         loadAction.setEnabled(true);
141         stopAction.setEnabled(false);
142         }
143     };
144     return createButton(stopAction);
145     }
146 
147     public JButton createButton(Action a) {
148     JButton b = new JButton();
149     // setting the following client property informs the button to show
150     // the action text as it's name. The default is to not show the
151     // action text.
152     b.putClientProperty("displayActionText", Boolean.TRUE);
153     b.setAction(a);
154     return b;
155     }
156 
157 
158     int textLocation = 0;
159 
160     String text = getString("ProgressBarDemo.text");
161 
162     public Action createTextLoadAction() {
163     return new AbstractAction("text load action") {
164         public void actionPerformed (ActionEvent e) {
165         if(progressBar.getValue() < progressBar.getMaximum()) {
166             progressBar.setValue(progressBar.getValue() + 1);
167             progressTextArea.append(text.substring(textLocation, textLocation+1));
168             textLocation++;
169         } else {
170             if(timer != null) {
171             timer.stop();
172             timer = null;
173             loadAction.setEnabled(true);
174             stopAction.setEnabled(false);
175             }
176         }
177         }
178     };
179     }
180 
181 
182     class MyTextArea extends JTextArea {
183         public MyTextArea() {
184             super(null, 0, 0);
185         setEditable(false);
186         setText("");
187         }
188 
189         public float getAlignmentX () {
190             return LEFT_ALIGNMENT;
191         }
192  
193         public float getAlignmentY () {
194             return TOP_ALIGNMENT;
195         }
196     }
197 }
198 
199 
200