dcsimg
May 26, 2018
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.

By submitting your information, you agree that developer.com may send you developer offers via email, phone and text message, as well as email offers about other products and services that developer believes may be of interest to you. developer will process your information in accordance with the Quinstreet Privacy Policy.

Sitemap

×
We have made updates to our Privacy Policy to reflect the implementation of the General Data Protection Regulation.
Thanks for your registration, follow us on our social networks to keep up-to-date