PAGO, NÃO É ACONSELHÁVEL ! MAS DECIDA POR VC MESMO.
tente entender, e se necessário for, envie uma pergunte.
E como o código q eu ainda estava realizado tá sem teste JUnit, q tal
própria nomenclatura/estrutura.
JPanel - to bonzinho e coloquei um main pra facilitar. Eu estou o
terminar.
package br.com.kubic.kubicFramework.swing.tags.panel;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.Paint;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Rectangle2D;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import br.com.kubic.kubicFramework.internalCore.bean.KubicChartBean;
import
br.com.kubic.kubicFramework.internalCore.services.bigDecimal.KubicBigD
ecimal;
public class KubicSwingTagChartBarPanel extends JPanel implements
ActionListener {
boolean animatedChart = false;
private static int DELAY = 10;
private Insets insets;
private int counter = 0;
private double[] theValor = null;
private int values[] = { 100, 10, 50, 50, 50, 50 };
private int[] barra;
private int[] starter;
private Color[] corDaBarra;
private Color[] coresPossiveis = { Color.RED, Color.CYAN,
Color.blue,
Color.green, Color.yellow, Color.orange,
Color.pink };
private int steps = values.length;
private int stepSize = 360 / steps;
public double tamanho = 0;
private double valueToView = 0;
private double valueToView2 = 0;
private int alturaBarraMax = 0;
private double maximo = 0;
private String theTitle;
private RenderingHints hints = null;
private String[] labels = null;
private int larguraBarra = 100;
private Graphics2D g2 = null;
public KubicChartBean chartBean2 = null;
private TimerTask task = null;
public void repaint() {
if (chartBean2 != null && g2 != null) {
this.theValor = chartBean2.getValor();
this.labels = chartBean2.getLabels();
this.theTitle = chartBean2.getTitulo();
this.animatedChart = chartBean2.isAnimate();
// cria numero de barras igual a quantidade
// de numeros passados
int tamanho = theValor.length;
barra = new int[tamanho];
corDaBarra = new Color[tamanho];
// descobre o maior valor
double maximo = 0;
for (int count = 0; count < tamanho; count++)
{
if (theValor[count] > maximo) {
maximo = theValor[count];
}
}
// guarda a informacao em valores relativos ao
// maximo, onde este vale 100 e outros valem
// uma porcentagem deste maximo sem casas
decimais
for (int count = 0; count < tamanho; count++)
{
barra[count] = (int) (100 *
(theValor[count] / maximo));
corDaBarra[count] =
coresPossiveis[count
%
coresPossiveis.length];
}
if (animatedChart) {
starter = new int[values.length];
int larguraJanela = getWidth();
int alturaJanela = getHeight();
int baseBarras = alturaJanela - 50;
int quantidadeDeBarras = barra.length;
int tamanhoItem = (larguraJanela /
quantidadeDeBarras);
int espacoEsquerda = 20;
// int larguraBarra = (int) (0.8 *
tamanhoItem);
alturaBarraMax = alturaJanela - 70 -
50;
String titulo = this.theTitle;
for (int count = 0; count <
quantidadeDeBarras; count++) {
int altura = (int)
((barra[count] * alturaBarraMax) / 100);
int x2 = count * tamanhoItem +
espacoEsquerda;
// int y2 = baseBarras -
altura;
int y2 = baseBarras;
// System.out.println("altura"
+ altura );
if (tamanho <= alturaBarraMax)
{
valueToView =
((tamanho / alturaBarraMax) * theValor[count]) * 1.1;
valueToView2 =
((tamanho / alturaBarraMax) * barra[count]) * 1.1;
}
Rectangle2D r = new
Rectangle2D.Double(0, 0, larguraBarra,
20);
if (tamanho < altura) {
/*
*
g2.setColor(corDaBarra[count]); r = new
*
Rectangle2D.Double(x2, y2 - tamanho, larguraBarra,
* tamanho);
*/
int
indiceFaddingInicial = 255;
int theIndiceFadding =
(int) (indiceFaddingInicial * (tamanho / alturaBarraMax));
Color
theColorBarraFadding = new Color(
corDaBarra[count].getRed(), corDaBarra[count]
.getGreen(), corDaBarra[count]
.getBlue(), theIndiceFadding);
g2.setColor(theColorBarraFadding);
r = new
Rectangle2D.Double(x2, y2 - tamanho,
larguraBarra, tamanho);
}
else {
valueToView2 =
barra[count];
g2.setColor(corDaBarra[count]);
r = new
Rectangle2D.Double(x2, baseBarras - altura,
larguraBarra, altura);
}
g2.fill(r);
//
g2.drawString(KubicBigDecimal.getParteInteira(theValor[count],
// 2) + "." +
//
KubicBigDecimal.getParteCentavos(theValor[count], 2) + "
// =" + " " +
KubicBigDecimal.getParteInteira(barra[count],
// 2) + "." +
KubicBigDecimal.getParteCentavos(barra[count],
// 2) + "% " , x2,
baseBarras+15);
g2.setColor(Color.white);
if (tamanho < altura &&
valueToView < theValor[count]) {
g2.drawString(KubicBigDecimal.getParteInteira(
valueToView, 2)
+ "."
+
KubicBigDecimal.getParteCentavos(valueToView,
2)
+ " ="
+ " "
+
KubicBigDecimal.getParteInteira(valueToView2,
2)
+ "."
+
KubicBigDecimal.getParteCentavos(
valueToView2, 2) + "% ", x2,
baseBarras + 15);
}
else {
altura = (int)
((barra[count] * alturaBarraMax) / 100);
g2.drawString(KubicBigDecimal.getParteInteira(
theValor[count], 2)
+ "."
+
KubicBigDecimal.getParteCentavos(
theValor[count], 2)
+ " ="
+ " "
+
KubicBigDecimal.getParteInteira(barra[count],
2)
+ "."
+
KubicBigDecimal.getParteCentavos(
barra[count], 2) + "% ", x2,
baseBarras + 15);
}
//
g2.drawString(KubicBigDecimal.getParteInteira(theValor[count],
// 2) + "." +
//
KubicBigDecimal.getParteCentavos(theValor[count], 2) + "
// =" + " " +
KubicBigDecimal.getParteInteira(barra[count],
// 2) + "." +
KubicBigDecimal.getParteCentavos(barra[count],
// 2) + "% " , x2,
baseBarras+15);
}
}
}
super.repaint();
}
public KubicSwingTagChartBarPanel(KubicChartBean chartBean) {
chartBean2 = chartBean;
this.theValor = chartBean.getValor();
this.labels = chartBean.getLabels();
this.theTitle = chartBean.getTitulo();
this.animatedChart = chartBean.isAnimate();
// DEFINICOES DE RENDEREIZACAO
hints = new
RenderingHints(RenderingHints.KEY_ALPHA_INTERPOLATION,
RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
hints.put(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
hints.put(RenderingHints.KEY_COLOR_RENDERING,
RenderingHints.VALUE_COLOR_RENDER_QUALITY);
hints.put(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
hints.put(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
// cria numero de barras igual a quantidade
// de numeros passados
int tamanho = theValor.length;
barra = new int[tamanho];
corDaBarra = new Color[tamanho];
// descobre o maior valor
double maximo = 0;
for (int count = 0; count < tamanho; count++) {
if (theValor[count] > maximo) {
maximo = theValor[count];
}
}
// guarda a informacao em valores relativos ao
// maximo, onde este vale 100 e outros valem
// uma porcentagem deste maximo sem casas decimais
for (int count = 0; count < tamanho; count++) {
barra[count] = (int) (100 * (theValor[count] /
maximo));
corDaBarra[count] = coresPossiveis[count %
coresPossiveis.length];
}
}
public void paintComponent(Graphics graphics) {
if (hints != null) {
counter++;
g2 = (Graphics2D) graphics;
g2.setRenderingHints(hints);
super.paintComponent(g2);
// GRADIENTE PANEL
final int heightGradiente = getHeight();
Color gradientStart = new Color(0, 0, 0);//
220, 255, 149);
Color gradientEnd = new Color(0, 0, 0);// 183,
234, 98);
GradientPaint painter = new GradientPaint(0,
0, gradientStart, 0,
heightGradiente, gradientEnd);
final Paint oldPainter = g2.getPaint();
g2.setPaint(painter);
g2.fill(g2.getClip());
gradientStart = new Color(0, 0, 0, 200);
gradientEnd = new Color(0, 0, 0, 255);
painter = new GradientPaint(0, 0, gradientEnd,
0,
heightGradiente / 2,
gradientStart);
g2.setPaint(painter);
g2.fill(g2.getClip());
painter = new GradientPaint(0, heightGradiente
/ 2, gradientStart,
0, heightGradiente,
gradientEnd);
g2.setPaint(painter);
g2.fill(g2.getClip());
g2.setPaint(oldPainter);
this.setBackground(Color.black);
Rectangle2D r = new Rectangle2D.Double(0, 0,
larguraBarra, 20);
if (insets == null) {
insets = getInsets();
}
starter = new int[values.length];
int larguraJanela = getWidth();
int alturaJanela = getHeight();
int baseBarras = alturaJanela - 50;
int quantidadeDeBarras = barra.length;
int tamanhoItem = (larguraJanela /
quantidadeDeBarras);
int espacoEsquerda = 20;
// int larguraBarra = (int) (0.8 *
tamanhoItem);
alturaBarraMax = alturaJanela - 70 - 50;
String titulo = this.theTitle;
g2.setColor(Color.white);
Font fonte = new Font("Tahoma", Font.BOLD,
20);
g2.setFont(fonte);
g2.drawString(titulo, espacoEsquerda - 1,
baseBarras
- alturaBarraMax - 35);
for (int count = 0; count <
quantidadeDeBarras; count++) {
int altura = (int) ((barra[count] *
alturaBarraMax) / 100);
int x2 = count * tamanhoItem +
espacoEsquerda;
int y2 = baseBarras - altura;
r = new Rectangle2D.Double(x2 - 2, y2
- 2, larguraBarra + 3,
altura + 3);
g2.setColor(Color.white);
g2.draw(r);
// g2d.drawString("" + (count+1) + "-"
+ labels[count], x+1,
// baseBarras-altura-10);
String theLabelForGraphic =
labels[count].toUpperCase();
int numeroMaximoCaracteresLabel = 15;
if (theLabelForGraphic.length() >
numeroMaximoCaracteresLabel) {
theLabelForGraphic =
theLabelForGraphic.substring(0,
numeroMaximoCaracteresLabel);
}
fonte = new Font("Tahoma",
Font.ITALIC, 11);
g2.setFont(fonte);
g2.drawString("" + theLabelForGraphic,
x2 + 1, baseBarras
- altura - 10);
}
if (animatedChart) {
for (int count = 0; count <
quantidadeDeBarras; count++) {
int altura = (int)
((barra[count] * alturaBarraMax) / 100);
int x2 = count * tamanhoItem +
espacoEsquerda;
// int y2 = baseBarras -
altura;
int y2 = baseBarras;
// System.out.println("altura"
+ altura );
if (tamanho <= alturaBarraMax)
{
valueToView =
((tamanho / alturaBarraMax) * theValor[count]) * 1.1;
valueToView2 =
((tamanho / alturaBarraMax) * barra[count]) * 1.1;
}
if (tamanho < altura) {
/*
*
g2.setColor(corDaBarra[count]); r = new
*
Rectangle2D.Double(x2, y2 - tamanho, larguraBarra,
* tamanho);
*/
int
indiceFaddingInicial = 255;
int theIndiceFadding =
(int) (indiceFaddingInicial * (tamanho / alturaBarraMax));
Color
theColorBarraFadding = new Color(
corDaBarra[count].getRed(), corDaBarra[count]
.getGreen(), corDaBarra[count]
.getBlue(), theIndiceFadding);
g2.setColor(theColorBarraFadding);
r = new
Rectangle2D.Double(x2, y2 - tamanho,
larguraBarra, tamanho);
}
else {
valueToView2 =
barra[count];
g2.setColor(corDaBarra[count]);
r = new
Rectangle2D.Double(x2, baseBarras - altura,
larguraBarra, altura);
}
g2.fill(r);
//
g2.drawString(KubicBigDecimal.getParteInteira(theValor[count],
// 2) + "." +
//
KubicBigDecimal.getParteCentavos(theValor[count], 2) + "
// =" + " " +
KubicBigDecimal.getParteInteira(barra[count],
// 2) + "." +
KubicBigDecimal.getParteCentavos(barra[count],
// 2) + "% " , x2,
baseBarras+15);
g2.setColor(Color.white);
if (tamanho < altura &&
valueToView < theValor[count]) {
g2.drawString(KubicBigDecimal.getParteInteira(
valueToView, 2)
+ "."
+
KubicBigDecimal.getParteCentavos(valueToView,
2)
+ " ="
+ " "
+
KubicBigDecimal.getParteInteira(valueToView2,
2)
+ "."
+
KubicBigDecimal.getParteCentavos(
valueToView2, 2) + "% ", x2,
baseBarras + 15);
}
else {
altura = (int)
((barra[count] * alturaBarraMax) / 100);
g2.drawString(KubicBigDecimal.getParteInteira(
theValor[count], 2)
+ "."
+
KubicBigDecimal.getParteCentavos(
theValor[count], 2)
+ " ="
+ " "
+
KubicBigDecimal.getParteInteira(barra[count],
2)
+ "."
+
KubicBigDecimal.getParteCentavos(
barra[count], 2) + "% ", x2,
baseBarras + 15);
}
//
g2.drawString(KubicBigDecimal.getParteInteira(theValor[count],
// 2) + "." +
//
KubicBigDecimal.getParteCentavos(theValor[count], 2) + "
// =" + " " +
KubicBigDecimal.getParteInteira(barra[count],
// 2) + "." +
KubicBigDecimal.getParteCentavos(barra[count],
// 2) + "% " , x2,
baseBarras+15);
}
}
else {
for (int count = 0; count <
quantidadeDeBarras; count++) {
int altura = (int)
((barra[count] * alturaBarraMax) / 100);
int x2 = count * tamanhoItem +
espacoEsquerda;
// int y2 = baseBarras -
altura;
int y2 = baseBarras;
r = new Rectangle2D.Double(x2,
baseBarras - altura,
larguraBarra,
altura);
g2.setColor(corDaBarra[count]);
g2.fill(r);
altura = (int) ((barra[count]
* alturaBarraMax) / 100);
g2.setColor(Color.white);
g2.drawString(KubicBigDecimal.getParteInteira(
theValor[count], 2)
+ "."
+
KubicBigDecimal.getParteCentavos(theValor[count],
2)
+ " ="
+ " "
+
KubicBigDecimal.getParteInteira(barra[count], 2)
+ "."
+
KubicBigDecimal.getParteCentavos(barra[count], 2)
+ "% ", x2,
baseBarras + 15);
}
}
g2.dispose();
}
else {
final Graphics2D g2 = (Graphics2D) graphics;
g2.dispose();
}
}
/**
* @param args
* the command line arguments
*/
public static void main(String[] args) {
Runnable doCreateAndShowGUI = new Runnable() {
public void run() {
createAndShowGUI();
}
};
SwingUtilities.invokeLater(doCreateAndShowGUI);
}
private static void createAndShowGUI() {
final String tituloChart = "KUBIC CHART";
JFrame f = new JFrame(tituloChart);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(800, 300);
/*
* KubicChartBean chartBean = new KubicChartBean();
* chartBean.setLabels(labels);
chartBean.setValor(valor);
* chartBean.setTitulo(tituloChart);
*/
// public AnimateBar(double [] valor, String []
labels, String title){
String tituloChart2 = "KUBIC CHART";
double[] valuesToChart = { 201.05, 33.22, 44.22,
100.22, 100.22,
100.00, 22.01 };
String[] labelToChart = { "SHELSON", "SHELSON",
"TESTE", "TESTE2", "TESTE3", "sss",
"sss" };
boolean animateChart = true;
KubicChartBean chartBean = new KubicChartBean();
chartBean.setLabels(labelToChart);
chartBean.setValor(valuesToChart);
chartBean.setTitulo(tituloChart);
chartBean.setAnimate(animateChart);
KubicSwingTagChartBarPanel animate = new
KubicSwingTagChartBarPanel(
chartBean);
int animateWidth = (labelToChart.length * 120) + 50;
int animateHeight = 300;
animate
.setPreferredSize(new
Dimension(animateWidth,
animateHeight - 50));
f.setVisible(true);
JScrollPane scroll = new JScrollPane(animate);
scroll.setPreferredSize(new Dimension(400,
animateHeight));
f.add(scroll);
animate.go();
}
public void repaint2() {
super.repaint();
}
public void go() {
if (task == null) {
task = new TimerTask() {
public void run() {
if (tamanho <= alturaBarraMax)
{
//
System.out.println("alturaBarraMax-" +
// alturaBarraMax);
//
System.out.println("tamanho-" + tamanho);
tamanho += 1.0;
repaint2();
} else {
}
}
};
Timer timer = new Timer();
timer.schedule(task, 0, DELAY);
}
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
}
}