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 | |