/* * Copyright (c) 2005-2008 Substance Kirill Grouchnikov. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * o Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * o Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * o Neither the name of Substance Kirill Grouchnikov nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package test.check; import java.awt.BorderLayout; import java.awt.Component; import java.awt.ComponentOrientation; import java.awt.Container; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.JScrollPane; import org.pushingpixels.trident.Timeline; import org.pushingpixels.trident.Timeline.RepeatBehavior; import org.pushingpixels.trident.callback.RunOnUIThread; import org.pushingpixels.trident.callback.TimelineCallbackAdapter; import com.jgoodies.forms.builder.DefaultFormBuilder; import com.jgoodies.forms.layout.FormLayout; /** * Test application panel for testing {@link JProgressBar} component. * * @author Kirill Grouchnikov */ public class ProgressBarPanel extends JPanel { /** * Button that starts the update of progress bars. */ private JButton startButton; /** * Button that stops the update of progress bars. */ private JButton stopButton; /** * Creates a new panel with progress bars. */ public ProgressBarPanel() { this.setLayout(new BorderLayout()); JPanel bars = new ScrollablePanel(); GridLayout gLayout = new GridLayout(1, 2); bars.setLayout(gLayout); FormLayout horizontalLm = new FormLayout("left:pref:grow", ""); DefaultFormBuilder horizontalBuilder = new DefaultFormBuilder( horizontalLm); horizontalBuilder.setDefaultDialogBorder(); JProgressBar determinateEnHor = new JProgressBar( JProgressBar.HORIZONTAL, 0, 100); determinateEnHor.setIndeterminate(false); horizontalBuilder.appendSeparator("Determinate enabled"); horizontalBuilder.append(determinateEnHor); JProgressBar determinateEnHorStr = new JProgressBar( JProgressBar.HORIZONTAL, 0, 100); determinateEnHorStr.setIndeterminate(false); determinateEnHorStr.setStringPainted(true); horizontalBuilder.appendSeparator("Determinate enabled + string"); horizontalBuilder.append(determinateEnHorStr); JProgressBar indeterminateEnHor = new JProgressBar( JProgressBar.HORIZONTAL, 0, 100); indeterminateEnHor.setIndeterminate(true); indeterminateEnHor.setStringPainted(true); indeterminateEnHor.setString("In progress"); horizontalBuilder.appendSeparator("Indeterminate enabled + string"); horizontalBuilder.append(indeterminateEnHor); JProgressBar determinateDisHor = new JProgressBar( JProgressBar.HORIZONTAL, 0, 100); determinateDisHor.setIndeterminate(false); determinateDisHor.setEnabled(false); horizontalBuilder.appendSeparator("Determinate disabled"); horizontalBuilder.append(determinateDisHor); JProgressBar determinateDisHorStr = new JProgressBar( JProgressBar.HORIZONTAL, 0, 100); determinateDisHorStr.setIndeterminate(false); determinateDisHorStr.setEnabled(false); determinateDisHorStr.setStringPainted(true); horizontalBuilder.appendSeparator("Determinate disabled + string"); horizontalBuilder.append(determinateDisHorStr); JProgressBar indeterminateDisHor = new JProgressBar( JProgressBar.HORIZONTAL, 0, 100); indeterminateDisHor.setIndeterminate(true); indeterminateDisHor.setEnabled(false); horizontalBuilder.appendSeparator("Indeterminate disabled"); horizontalBuilder.append(indeterminateDisHor); bars.add(horizontalBuilder.getPanel()); FormLayout verticalLm = new FormLayout( "center:pref:grow, 4dlu, center:pref:grow, 4dlu, " + "center:pref:grow, 4dlu, center:pref:grow, 4dlu, center:pref:grow", ""); DefaultFormBuilder verticalBuilder = new DefaultFormBuilder(verticalLm); verticalBuilder.setDefaultDialogBorder(); verticalBuilder.append("Enabled"); verticalBuilder.append("RTL"); verticalBuilder.append("Indeterm"); verticalBuilder.append("Disabled"); verticalBuilder.append("Dis indet"); JProgressBar determinateEnVer = new JProgressBar(JProgressBar.VERTICAL, 0, 100); determinateEnVer.setIndeterminate(false); determinateEnVer.setStringPainted(true); verticalBuilder.append(determinateEnVer); JProgressBar determinateEnVerRTL = new JProgressBar( JProgressBar.VERTICAL, 0, 100); determinateEnVerRTL.setIndeterminate(false); determinateEnVerRTL.setStringPainted(true); determinateEnVerRTL .setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); verticalBuilder.append(determinateEnVerRTL); JProgressBar indeterminateEnVer = new JProgressBar( JProgressBar.VERTICAL, 0, 100); indeterminateEnVer.setIndeterminate(true); indeterminateEnVer.setStringPainted(true); indeterminateEnVer.setString("In progress"); verticalBuilder.append(indeterminateEnVer); JProgressBar determinateDisVer = new JProgressBar( JProgressBar.VERTICAL, 0, 100); determinateDisVer.setIndeterminate(false); determinateDisVer.setEnabled(false); verticalBuilder.append(determinateDisVer); JProgressBar indeterminateDisVer = new JProgressBar( JProgressBar.VERTICAL, 0, 100); indeterminateDisVer.setIndeterminate(true); indeterminateDisVer.setEnabled(false); verticalBuilder.append(indeterminateDisVer); bars.add(verticalBuilder.getPanel()); this.add(new JScrollPane(bars), BorderLayout.CENTER); JPanel buttons = new JPanel(); buttons.setLayout(new FlowLayout(FlowLayout.CENTER)); final Timeline progressTimeline = new Timeline(this); @RunOnUIThread class ProgressCallback extends TimelineCallbackAdapter { @Override public void onTimelinePulse(float durationFraction, float timelinePosition) { delta(ProgressBarPanel.this, 1); } } progressTimeline.addCallback(new ProgressCallback()); progressTimeline.setDuration(2000); this.startButton = new JButton("start"); this.startButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { progressTimeline.playLoop(RepeatBehavior.LOOP); startButton.setEnabled(false); stopButton.setEnabled(true); } }); this.stopButton = new JButton("stop"); this.stopButton.setEnabled(false); this.stopButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { progressTimeline.cancel(); stopButton.setEnabled(false); startButton.setEnabled(true); } }); JButton plus10Button = new JButton("plus 10"); plus10Button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { delta(ProgressBarPanel.this, 10); } }); buttons.add(plus10Button); JButton minus10Button = new JButton("minus 10"); minus10Button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { delta(ProgressBarPanel.this, -10); } }); buttons.add(minus10Button); JButton plus1Button = new JButton("plus 1"); plus1Button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { delta(ProgressBarPanel.this, 1); } }); buttons.add(plus1Button); JButton minus1Button = new JButton("minus 1"); minus1Button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { delta(ProgressBarPanel.this, -1); } }); buttons.add(minus1Button); JButton resetButton = new JButton("reset"); resetButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { progressTimeline.cancel(); reset(ProgressBarPanel.this); stopButton.setEnabled(false); startButton.setEnabled(true); } }); buttons.add(this.startButton); buttons.add(this.stopButton); buttons.add(resetButton); this.add(buttons, BorderLayout.SOUTH); } protected static void delta(Component c, int delta) { if (c instanceof JProgressBar) { JProgressBar pb = (JProgressBar) c; if (!pb.isIndeterminate()) { int newValue = pb.getValue() + delta; if (newValue < pb.getMinimum()) newValue = pb.getMinimum(); if (newValue > pb.getMaximum()) newValue = pb.getMaximum(); pb.setValue(newValue); } } if (c instanceof Container) { Container cont = (Container) c; for (int i = 0; i < cont.getComponentCount(); i++) { delta(cont.getComponent(i), delta); } } } protected static void reset(Component c) { if (c instanceof JProgressBar) { JProgressBar pb = (JProgressBar) c; if (!pb.isIndeterminate()) { pb.setValue(pb.getMinimum()); } } if (c instanceof Container) { Container cont = (Container) c; for (int i = 0; i < cont.getComponentCount(); i++) { reset(cont.getComponent(i)); } } } }