package model.progressbar; import java.awt.BorderLayout; import java.awt.Dimension; import java.util.Timer; import java.util.TimerTask; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.SwingConstants; import model.progressbar.interfaces.IProgressBar; import model.util.WindowUtils; public class InProgressBar extends IProgressBar { /** * true if enabled, else false */ private boolean enable; /** * delay between every dot */ private int dotDelay; /** * delay after progressbar is stopped when it fades */ private int closeDelay; /** * the step */ private int step; /** * strings which should be displayed at each step */ private String[] steps; /** * Constructor, creates a bar with 400ms dot delay and 200ms close delay */ public InProgressBar() { this.dotDelay = 400; this.closeDelay = 200; step = 0; steps = new String[] { "in progress" }; } /** * creates a bar * * @param dotDelay * delay between the dots in inprogress ... <- dots * @param closeDelay * the delay the bar should be closed after stopbar is called */ public InProgressBar(int dotDelay, int closeDelay) { this.dotDelay = dotDelay; this.closeDelay = closeDelay; step = 0; steps = new String[] { "in progress" }; } /** * creates a bar * * @param steps * the strings which should be shown at each steap * @param dotDelay * delay between the dots in inprogress ... <- dots * @param closeDelay * the delay the bar should be closed after stopbar is called */ public InProgressBar(String[] steps, int dotDelay, int closeDelay) { this.dotDelay = dotDelay; this.closeDelay = closeDelay; step = 0; this.steps = steps; } /* * (non-Javadoc) * * @see java.lang.Thread#run() */ @Override public void run() { enable = true; final JFrame frame = new JFrame(); frame.setLayout(new BorderLayout()); frame.setPreferredSize(new Dimension(250, 150)); JLabel label = new JLabel(steps[step]); label.setHorizontalAlignment(SwingConstants.CENTER); frame.add(label, BorderLayout.CENTER); frame.setLocation(WindowUtils.getCenteredWindowCoordinates(frame)); frame.pack(); frame.setVisible(true); int dots = 0; while (enable) { label.setText(steps[step] + " " + makeDots(dots)); dots++; dots = dots % 4; try { Thread.sleep(dotDelay); } catch (InterruptedException e) { e.printStackTrace(); } } Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { frame.dispose(); } }, closeDelay); } /* * (non-Javadoc) * * @see model.progressbar.interfaces.IProgressBar#nextStep() */ @Override public void nextStep() { step++; } /** * depending on the given number prints nothing, ., .. or ... * * @param num * number of dots 0-3 * * @return the dot string */ private String makeDots(int num) { switch (num) { case 0: return ""; case 1: return "."; case 2: return ".."; case 3: return "..."; } return ""; } /* * (non-Javadoc) * * @see model.progressbar.IProgressBar#stopBar() */ @Override public void stopBar() { enable = false; } /* * (non-Javadoc) * * @see model.progressbar.interfaces.IProgressBar#setMax(int) */ @Override public void setMax(int max) { // unused } }