X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FProgressPanel.java;h=170e9eb3987f6883c71d8f2097a033f03511e563;hb=9c60565679988fbf1139adb6805c28f8719f8af3;hp=6a70f6ad928e431b5b6c49cf8ac6961d4f502162;hpb=e2a9bdae8dceb5ca97fe8be3f5c7d71b335ee234;p=jalview.git diff --git a/src/jalview/gui/ProgressPanel.java b/src/jalview/gui/ProgressPanel.java index 6a70f6a..170e9eb 100644 --- a/src/jalview/gui/ProgressPanel.java +++ b/src/jalview/gui/ProgressPanel.java @@ -23,8 +23,12 @@ package jalview.gui; import jalview.api.RendererListenerI; import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.Color; +import java.awt.Dimension; import java.beans.PropertyChangeEvent; +import javax.swing.BorderFactory; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; @@ -42,6 +46,10 @@ public class ProgressPanel extends JPanel implements RendererListenerI // 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; @@ -49,7 +57,13 @@ public class ProgressPanel extends JPanel implements RendererListenerI 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. @@ -59,20 +73,48 @@ public class ProgressPanel extends JPanel implements RendererListenerI * @param label * The label to place next to the progress bar */ - public ProgressPanel(String eventPropertyName, String label) + public ProgressPanel(String eventPropertyName, String label, int maxwidth) { super(new BorderLayout(10, 0)); - setBorder(new EmptyBorder(0, 3, 0, 20)); + setBorder(new EmptyBorder(0, 3, 0, 0)); eventName = eventPropertyName; - labelText = label; + String labelText = label; + + final int w = maxwidth; - progressBar = new JProgressBar(); + progressBar = new JProgressBar() + { + @Override + public Dimension getMaximumSize() + { + return new Dimension(w, 1); + } + }; progressBar.setMinimum(0); + progressBar.setPreferredSize(progressBar.getMaximumSize()); progressLabel = new JLabel(labelText); + progressLabel.setFont(new java.awt.Font("Verdana", 0, 11)); + + // 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); + add(new JLabel(" "), BorderLayout.EAST); + + setBorder(BorderFactory.createLineBorder(Color.black)); + // setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED)); } @Override @@ -85,19 +127,21 @@ public class ProgressPanel extends JPanel implements RendererListenerI 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) + if (progress >= MAXVALUE) { - progressBar.setVisible(false); - progressLabel.setText(" "); // keep visible so panel stays visible + labelLayout.show(labelPanel, INVISIBLE); + barLayout.show(barPanel, INVISIBLE); } } }