dcsimg
May 23, 2017
Hot Topics:

A Simple Color Progress Bar

  • November 7, 2000
  • 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






Comment and Contribute

 


(Maximum characters: 1200). You have characters left.

 

 


Enterprise Development Update

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

Sitemap | Contact Us

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