Package ar.app.components

Source Code of ar.app.components.Status$Monitor

package ar.app.components;

import java.awt.BorderLayout;

import javax.swing.*;

import ar.Renderer;
import ar.app.util.LabeledItem;

public class Status extends JPanel {
  private static final long serialVersionUID = -3243629269704290121L;
  private final JProgressBar progress = new JProgressBar();
  private final Thread t = new Thread(new Monitor(), "Status updater");
  private Renderer watching;

  public Status() {
    this.add(new LabeledItem("Processing:", progress), BorderLayout.CENTER);
    progress.setMaximum(100);
    progress.setMinimum(0);
    progress.setStringPainted(true);

    t.setDaemon(true);
    t.start();
  }
 
  public void startMonitoring(Renderer renderer) {
    progress.setString("Starting...");
    this.watching = renderer;
  }
 
  public void setStatus(double status, String message) {
    if (Double.isNaN(status)) {
      progress.setString("... working ...");
    } else {
      status = Math.max(status, 0);
      progress.setValue((int) (status*100));
      progress.setString(message);
    }
  }
 
  private class Monitor implements Runnable {
    private double cached;
    public void run() {
      int delay = 10;
      while (true) {
        try {Thread.sleep(delay);}
        catch (InterruptedException e) {
          SwingUtilities.invokeLater(new UpdateTask(-1, "Interrupted monitoring"));
          return;
        }

        if (watching == null) {delay = 500; continue;}
        double progress = watching.progress().percent();
        String message = watching.progress().message();
        if (progress == cached) {delay = 500; continue;}
        cached = progress;
        delay = 10;
        SwingUtilities.invokeLater(new UpdateTask(progress, message));
      }
    }
  }
 
  private class UpdateTask implements Runnable {
    private final double status;
    private final String message;
   
    public UpdateTask(double status, String message) {
      this.status=status;
      this.message = message;
    }
   
    public void run() {
      Status.this.setStatus(status, message);
    }
  }
 
}
TOP

Related Classes of ar.app.components.Status$Monitor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.