Ciao,
Ho corretto la classe così:
codice:
public class PannelloDisegno extends JPanel {
int xMin, xMax, yMin, yMax;
// gli intervalli in cui vogliamo disegnare
int larghezza = 1800, altezza = 1600;
// corrispondono alla grandezza del pannello
double fattoreScalaX, fattoreScalaY;
BufferedImage buffer;
PannelloDisegno(int xmax, int ymax) {
xMin = xmax * (-1);
xMax = xmax;
yMin = ymax * (-1);
yMax = ymax;
scalaPannello();
}
public void scalaPannello() {
buffer = new BufferedImage(larghezza, altezza, BufferedImage.TYPE_INT_RGB);//disegno su un buffer
Graphics g = buffer.getGraphics();
fattoreScalaX = larghezza / ((double) xMax - xMin);
fattoreScalaY = altezza / ((double) yMax - yMin);
g.setColor(Color.red);
g.drawLine(0, altezza / 2, larghezza - 1, altezza / 2);
g.drawLine(larghezza / 2, 0, larghezza / 2, altezza - 1);
// scrittura valori estremi degli assi
g.drawString("" + xMin, 5, altezza / 2 - 5);
g.drawString("" + xMax, larghezza - 20, altezza / 2 - 5);
g.drawString("" + yMax, larghezza / 2 + 5, 15);
g.drawString("" + yMin, larghezza / 2 + 5, altezza - 5);
this.setPreferredSize(new Dimension(larghezza, altezza));
//this.updateUI();
this.repaint();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(buffer, 0, 0, this);//ricopio il buffer sul monitor
}
void setLine(Punto p1, Punto p2) {//disegna una linea da p1 a p2
Graphics g = buffer.getGraphics();
g.setColor(Color.green);
g.drawLine((int) ((p1.getXi(0) - xMin) * fattoreScalaX), (int) (altezza - (p1.getXi(1) - yMin) * fattoreScalaY),
(int) ((p2.getXi(0) - xMin) * fattoreScalaX), (int) (altezza - (p2.getXi(1) - yMin) * fattoreScalaY));
//this.updateUI();
repaint();
}
}
mentre per quanto riguarda il grafico il codice dell'evento che ridisegna il pannello e questo:
codice:
pannello.scalaPannello();
if (disegnato) {
for (i = 0; i < p.lista.size() - 1; i++) {
pannello.setLine(p.lista.get(i), p.lista.get(i + 1));
}
}
quindi prima ridisegno il pannello con scalaPannello();
dopodichè semplicemente scorro nuovamente la lista dei punti per ridisegnare il grafico da capo!