2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ The Jalview Authors
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3
10 * of the License, or (at your option) any later version.
12 * Jalview is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19 * The Jalview Authors are detailed in the 'AUTHORS' file.
23 import jalview.api.RendererListenerI;
25 import java.awt.BorderLayout;
26 import java.awt.CardLayout;
27 import java.beans.PropertyChangeEvent;
29 import javax.swing.JLabel;
30 import javax.swing.JPanel;
31 import javax.swing.JProgressBar;
32 import javax.swing.border.EmptyBorder;
35 * A class to manage a panel containing a label and progress bar updated by an
41 public class ProgressPanel extends JPanel implements RendererListenerI
43 // max value of progress bar: values expected to be %s
44 private final int MAXVALUE = 100;
46 private final String VISIBLE = "VISIBLE";
48 private final String INVISIBLE = "INVISIBLE";
50 // name of event property which updates the progress bar
51 private String eventName;
53 private JProgressBar progressBar;
55 private JLabel progressLabel;
57 private JPanel labelPanel = new JPanel();
59 private CardLayout labelLayout = new CardLayout();
61 private JPanel barPanel = new JPanel();
63 private CardLayout barLayout = new CardLayout();
66 * Construct a JPanel containing a progress bar and a label.
68 * @param eventPropertyName
69 * The name of the event property to update the progress bar
71 * The label to place next to the progress bar
73 public ProgressPanel(String eventPropertyName, String label)
75 super(new BorderLayout(10, 0));
76 setBorder(new EmptyBorder(0, 3, 0, 20));
78 eventName = eventPropertyName;
79 String labelText = label;
81 progressBar = new JProgressBar();
82 progressBar.setMinimum(0);
83 progressLabel = new JLabel(labelText);
85 // Use a CardLayout to stop the progress bar panel moving around when
86 // changing visibility
87 labelPanel.setLayout(labelLayout);
88 barPanel.setLayout(barLayout);
90 labelPanel.add(progressLabel, VISIBLE);
91 labelPanel.add(new JPanel(), INVISIBLE);
92 barPanel.add(progressBar, VISIBLE);
93 barPanel.add(new JPanel(), INVISIBLE);
95 labelLayout.show(labelPanel, VISIBLE);
96 barLayout.show(barPanel, VISIBLE);
98 add(labelPanel, BorderLayout.WEST);
99 add(barPanel, BorderLayout.CENTER);
104 * Update the progress bar in response to the event. Expects the value
105 * supplied by the event to be in the range 0-100 i.e. a percentage
107 public void propertyChange(PropertyChangeEvent evt)
109 if (evt.getPropertyName().equals(eventName))
111 int progress = (int) evt.getNewValue();
112 progressBar.setValue(progress);
114 // switch progress bar to visible if it is not visible and current
115 // progress is less than MAXVALUE
116 // switch progress bar to invisible if it is visible and we reached
118 if (progress < MAXVALUE && !progressBar.isVisible())
120 labelLayout.show(labelPanel, VISIBLE);
121 barLayout.show(barPanel, VISIBLE);
123 else if (progress >= MAXVALUE)
125 labelLayout.show(labelPanel, INVISIBLE);
126 barLayout.show(barPanel, INVISIBLE);