dcsimg
September 30, 2020
Hot Topics:

A Simple Color Progress Bar

  • By Giacomo Veneri
  • Send Email »
  • More Articles »

A simple color JProgressBar.

Figure 1.

/**
 * Title:        JackGraph<p>
 * Description:  Grafici 2D,3D.
 * Copyright 2000.
 * <p>
 * Copyright:    Copyright (c) Giacomo Veneri<p>
 * Company:      Etruria Innovazione SCpA<p>
 * @author Giacomo Veneri
 * @version 1.0
 */
package jack.component;

import javax.swing.*;
import java.awt.*;
import javax.swing.border.*;

public class uJackSlider extends JProgressBar{

  //--------------------------------------------------------------------------

    public static final String TITLE = "Line Graph";
    public static final String VERSION = "1.0";
    private final boolean DEBUG = true;

  //--------------------------------------------------------------------------

    private int type = 0;
    private int typeColor = 0;
    public static final int INDICATOR = 0;
    public static final int COMPETITIVE = 1;
    public static final int CIRCULAR = 2;
    public static final int MULTICOLOR = 3;
    public static final int REDBLUE = 0;
    public static final int REDGREEN = 1;
    public static final int BLUEGREEN = 2;

  //--------------------------------------------------------------------------

    private int otherValue = -1;
    private Color otherForegroundColor = Color.red;

  //--------------------------------------------------------------------------
  //slider constructor
  public uJackSlider(int type) {
  super();
  this.setForeground(Color.blue);
  this.setType(type);
  this.setBorder(new EtchedBorder(EtchedBorder.LOWERED));
  }

  //slider constructor
  public uJackSlider() {
  super();
  this.setForeground(Color.blue);
  this.setBorder(new EtchedBorder(EtchedBorder.LOWERED));
  }

  //slider constructor
  public uJackSlider(int min, int max) {
  super(min,max);
  this.setForeground(Color.blue);
  this.setBorder(new EtchedBorder(EtchedBorder.LOWERED));
  }

  //graph ONLY OVERLOADED
  public void paint(Graphics g) {

    //controllo
    if (g==null) return;

    //delete paint
    g.setColor(this.getBackground());
    g.fill3DRect(0,0,this.getWidth(),this.getHeight(),true);

    //draw select
    if (type == INDICATOR) this.drawIndicator(g);
    if (type == CIRCULAR) this.drawCircular(g);
    if (type == MULTICOLOR) this.drawMulticolor(g);
    if (type == COMPETITIVE) this.drawCompetitive(g);
  }

  /**
   * DATA SETTING OTHER
   */

   public void setOtherValue(int value) {
    otherValue = value;
   }


   public int getOtherValue() {
    return otherValue;
   }

   public void setOtherForeground(Color value) {
    otherForegroundColor = value;
   }


   public Color getOtherForeground() {
    return otherForegroundColor;
   }

   public void setType(int type) {
    this.type = type;
   }

   public void setTypeColor(int typeColor) {
    this.typeColor = typeColor;
   }

   //--------------------------------------------------------------------------
   /**
    * PRIVATE FUNCTION
    */
    //INDICATOR MODE
    private void drawIndicator(Graphics g) {

    //prepare setting
    int h = this.getHeight();
    int w = this.getWidth();
    int ox = (getOtherValue()>=0) ? w/2 : 0;
    int oy = 0;

    //paint
    int[] xPoints = new int[4];
    int[] yPoints = new int[4];

    //upper
    xPoints[0]=ox;
    yPoints[0]=oy;
    xPoints[1]=ox;
    yPoints[1]=h;
    xPoints[2]= ox+((int)(((double)w/2)* ((double)this.getValue())/((double)(this.getMaximum()-this.getMinimum()))));
    xPoints[2]= (xPoints[2]>0) ? xPoints[2] : 0;
    yPoints[2]=h/2;
    xPoints[3]=ox;
    yPoints[3]=oy;

    //draw
    g.setColor(this.getForeground());
    g.fillPolygon(xPoints,yPoints,4);
    g.setColor(this.getForeground().darker());
    g.drawPolyline(xPoints,yPoints,4);
    g.drawString(this.getValue() + " %",xPoints[2],yPoints[2]+3);

    if (getOtherValue()>=0) {
        //lower
        xPoints[0]=0;
        yPoints[0]=oy;
        yPoints[1]=h;
        xPoints[0]=xPoints[1];
        xPoints[2]=((int)(ox-((double)ox)* ((double)this.getOtherValue())/((double)(this.getMaximum()-this.getMinimum()))));
        xPoints[2]= (xPoints[2]>0) ? xPoints[2] : 0;
        yPoints[2]=h/2;
        xPoints[3]=xPoints[0];
        yPoints[3]=yPoints[0];

        //draw
        g.setColor(this.getOtherForeground());
        g.fillPolygon(xPoints,yPoints,4);
        g.setColor(this.getOtherForeground().darker());
        g.drawPolyline(xPoints,yPoints,4);
        g.drawString(this.getOtherValue() + " %",xPoints[2]-10,yPoints[2]+3);
    }
    }

    //COMPETITIVE MODE
    private void drawCompetitive(Graphics g) {
    }

    //CIRCULAR MODE
    private void drawCircular(Graphics g) {
    }

    //MULTICOLOR MODE
    private void drawMulticolor(Graphics g) {
      //prepare setting
      int h = this.getHeight();
      int w = this.getWidth();

      //value
      int value = this.getValue();
      int maxV = this.getMaximum();
      float perc = ((float)value)/((float)maxV);

      int i=0;
      for (i=0; i<w; i++) {
        if ( perc>=((float)i)/((float)w) ) {
          g.setColor(this.getMColor(i,w));
          g.drawLine(i,1,i,h-1);
        } else {
          break;
        }
      }

      g.setColor(this.getBackground());
      g.drawString(this.getValue() + " %",w/2,h/2);
    }

    //GET COLOR
    private Color getMColor(int i, int N) {
      float v = ((float)i)/((float)N);
      if (this.typeColor == REDBLUE) return new Color((int)(254*v+1),0, (int)(255-254*v));
      if (this.typeColor == REDGREEN) return new Color((int)(254*v+1), (int)(255-254*v),0);
      if (this.typeColor == BLUEGREEN) return new Color(0,(int)(254*v+1), (int)(255-254*v));
      return new Color((int)(254*v+1),(int)(254*v+1), (int)(254*v+1));
    }


}

History

Date Posted: 6/Nov/2000






This article was originally published on November 7, 2000

Enterprise Development Update

Don't miss an article. Subscribe to our newsletter below.


Thanks for your registration, follow us on our social networks to keep up-to-date