import jalview.api.RendererListenerI;
import java.awt.BorderLayout;
+import java.awt.CardLayout;
import java.beans.PropertyChangeEvent;
import javax.swing.JLabel;
// max value of progress bar: values expected to be %s
private final int MAXVALUE = 100;
+ private final String VISIBLE = "VISIBLE";
+
+ private final String INVISIBLE = "INVISIBLE";
+
// name of event property which updates the progress bar
private String eventName;
private JLabel progressLabel;
- private String labelText;
+ private JPanel labelPanel = new JPanel();
+
+ private CardLayout labelLayout = new CardLayout();
+
+ private JPanel barPanel = new JPanel();
+
+ private CardLayout barLayout = new CardLayout();
/**
* Construct a JPanel containing a progress bar and a label.
setBorder(new EmptyBorder(0, 3, 0, 20));
eventName = eventPropertyName;
- labelText = label;
+ String labelText = label;
progressBar = new JProgressBar();
progressBar.setMinimum(0);
progressLabel = new JLabel(labelText);
+
+ // Use a CardLayout to stop the progress bar panel moving around when
+ // changing visibility
+ labelPanel.setLayout(labelLayout);
+ barPanel.setLayout(barLayout);
- add(progressLabel, BorderLayout.WEST);
- add(progressBar, BorderLayout.CENTER);
+ labelPanel.add(progressLabel, VISIBLE);
+ labelPanel.add(new JPanel(), INVISIBLE);
+ barPanel.add(progressBar, VISIBLE);
+ barPanel.add(new JPanel(), INVISIBLE);
+
+ labelLayout.show(labelPanel, VISIBLE);
+ barLayout.show(barPanel, VISIBLE);
+
+ add(labelPanel, BorderLayout.WEST);
+ add(barPanel, BorderLayout.CENTER);
}
@Override
if (evt.getPropertyName().equals(eventName))
{
int progress = (int) evt.getNewValue();
-
- System.out.println(progress);
-
progressBar.setValue(progress);
+
+ // switch progress bar to visible if it is not visible and current
+ // progress is less than MAXVALUE
+ // switch progress bar to invisible if it is visible and we reached
+ // MAXVALUE
if (progress < MAXVALUE && !progressBar.isVisible())
{
- progressBar.setVisible(true);
- progressLabel.setText(labelText);
+ labelLayout.show(labelPanel, VISIBLE);
+ barLayout.show(barPanel, VISIBLE);
}
else if (progress >= MAXVALUE)
{
- progressBar.setVisible(false);
- progressLabel.setText(" "); // keep visible so panel stays visible
+ labelLayout.show(labelPanel, INVISIBLE);
+ barLayout.show(barPanel, INVISIBLE);
}
}
}