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