Se vuoi ho abbozzato una semplicissima classe, abbastanza incompleta e decisamente migliorabile:
codice:
import java.awt.*;
import javax.swing.*;
public class Grafico extends JPanel {
private int [] valori;
private int [] valNorm;
private int max;
private int valMax;
private boolean drawChart;
public Grafico() { this( new int[0] ); }
public Grafico(int [] valori) {
this.valori = valori;
valNorm = new int[valori.length];
drawChart = false;
cercaMax();
}
public void setValori(int [] valori) {
this.valori = valori;
valNorm = new int[valori.length];
cercaMax();
normalizza();
}
public void disegna() {drawChart = true; repaint(); }
public void paint(Graphics g) {
if (drawChart) {
for (int i=0; i<valori.length; i++) {
g.fillRect((i*20 + 10), (valMax - valNorm[i])+10 , 10, getHeight());
}
g.drawRect(0, 0, getWidth()-1, getHeight()-1);
}
}
private void cercaMax() {
for (int i=0; i<valori.length; i++) max = (valori[i] > max) ? valori[i] : max;
}
private void normalizza() {
int altezza = getHeight()-10;
for (int i=0; i<valori.length; i++) {
valNorm[i] = (altezza * valori[i]) / max;
if (valori[i] == max) valMax = valNorm[i];
System.out.println(valNorm[i]);
}
}
}
Questa classe la puoi usare all'interno del tuo progetto, nel modo seguente:
codice:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Finestra extends JFrame {
private Grafico g;
public Finestra() {
getContentPane().setLayout(null);
setTitle("Titolo");
setSize(800, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
show();
}
public void visualizza() {
g = new Grafico();
int [] valori = {10, 7, 12, 20, 18, 6, 15, 7, 25, 50, 5, 32, 8, 7, 7, 7, 34};
g.setBounds(50, 50, 500, 500);
getContentPane().add(g);
g.setValori(valori);
g.disegna();
}
public static void main(String [] args) {
Finestra f = new Finestra();
f.visualizza();
}
}
Ciao.