Close

Java Swing - ProgressMonitor Example

[Updated: Jul 4, 2018, Created: Jun 16, 2018]

ProgressMonitor monitors the progress of a user task and pops up a dialog if necessary. It's not a component but a helper class which manages a JProgressBar instance and shows that in a JDialog at the right time.

Example

package com.logicbig.example;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.util.concurrent.TimeUnit;

public class ProgressMonitorExample {

  public static void main(String[] args) {
      JFrame frame = createFrame("ProgressMonitor Example");
      JButton button = new JButton("start task");
      button.addActionListener(createStartTaskActionListener(frame));
      frame.add(button, BorderLayout.NORTH);
      frame.setVisible(true);
  }

  private static ActionListener createStartTaskActionListener(Component parent) {
      //for progress monitor dialog title
      UIManager.put("ProgressMonitor.progressText", "Test Progress");
      return (ae) -> {
          new Thread(() -> {
              //creating ProgressMonitor instance
              ProgressMonitor pm = new ProgressMonitor(parent, "Test Task",
                      "Task starting", 0, 100);

              //decide after 100 millis whether to show popup or not
              pm.setMillisToDecideToPopup(100);
              //after deciding if predicted time is longer than 100 show popup
              pm.setMillisToPopup(100);
              for (int i = 1; i <= 100; i++) {
                  //updating ProgressMonitor note
                  pm.setNote("Task step: " + i);
                  //updating ProgressMonitor progress
                  pm.setProgress(i);
                  try {
                      //delay for task simulation
                      TimeUnit.MILLISECONDS.sleep(200);
                  } catch (InterruptedException e) {
                      System.err.println(e);
                  }
              }
              pm.setNote("Task finished");
          }).start();
      };
  }

  public static JFrame createFrame(String title) {
      JFrame frame = new JFrame(title);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setSize(new Dimension(800, 700));
      return frame;
  }
}

Output

Clicking on 'start task' button:

Example Project

Dependencies and Technologies Used:

  • JDK 10
  • Maven 3.3.9

ProgressMonitor Example Select All Download
  • swing-progress-monitor-example
    • src
      • main
        • java
          • com
            • logicbig
              • example
                • ProgressMonitorExample.java

    See Also