Here’s the code for a multi progress bar.
Simple colored JProgressBar.
Multi ProgressBar.
Use:
//INSTANCE
uJackSlider s0 = new uJackSlider(uJackSlider.CIRCULAR);
uJackSlider s1 = new uJackSlider(uJackSlider.INDICATOR);
uJackSlider s2 = new uJackSlider(uJackSlider.COMPETITIVE);
uJackSlider s3 = new uJackSlider(uJackSlider.MULTICOLOR);//SET COLOR
s0.setForeground(Color.red);
s0.setOtherForeground(Color.orange);
s3.setTypeColor(s3.BLUEGREEN);//SET VALUE
s0.setOtherValue(80);
s0.setValue(100);
Code:
/**
* Title: JackGraph* Description: Grafici 2D,3D.
* Copyright 2000.
** Copyright: Copyright (c) Giacomo Veneri
* Company: Etruria Innovazione SCpA
* @author Giacomo Veneri
* @version 1.0
*/
//package jack.component;import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
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;
this.repaint();
}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) {
//prepare setting
int h = this.getHeight();
int w = this.getWidth();
int ox = 0;
int oy = 0;
double a = (double)this.getValue()/(double)this.getMaximum();
double b = (double)this.getOtherValue()/(double)this.getMaximum();
double A = w*a/(a+b);//draw
g.setColor(this.getForeground());
g.fill3DRect(1,1,(int)A,h-1, true);
g.setColor(this.getOtherForeground());
g.fill3DRect((int)A,1,w-1,h-1, true);//drw string
g.setColor(Color.white);
g.drawString(“” + a*100 + “%”, (int)(A/2), h/2);
g.drawString(“” + b*100 + “%”, (int)((w-A)/2+A), h/2);g.drawLine((int)A,1,(int)A,h);
}//CIRCULAR MODE
private void drawCircular(Graphics g) {
//prepare setting
int h = this.getHeight();
int w = this.getWidth();
int ox = 0;
int oy = 0;
double a = 360-this.getValue()*360/this.getMaximum();
double bh = this.getOtherValue()*h/this.getMaximum()/2;
double bw = this.getOtherValue()*w/this.getMaximum()/2;//draw
g.setColor(this.getOtherForeground());
g.fillArc(1,1,w,h, (int)a, (int)(360-a));
g.setColor(this.getForeground());
g.fillArc((int)bw,(int)bh,w-2*(int)bw,h-2*(int)bh, (int)a, (int)(360-a));//drw string
g.setColor(Color.white);
g.drawString(“” + this.getValue() + “%”, w/2,h/2);
g.drawString(“” + this.getOtherValue() + “%”, (int)bw,(int)bh);
}//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=((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));
}
}
DownLoads
Download demo and source files = 2.6K
This article was contributed by
Giacomo Veneri of Etruria Innovazione SCpA.