Salve a tutti,

Ho una classe che si occupa di disegnare un grafico su un piano cartesiano su un jPanel dotato di barre di scroll
Questa è la classe:

codice:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JPanel;


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();
    }

    
    @Override
    public void paintComponent(Graphics g) {
            try {
            super.paintComponent(g);
            g.drawImage(buffer, 0, 0, this);//ricopio il buffer sul monitor
        } catch (Exception ex) {
            Logger.getLogger(PannelloDisegno.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    void setLine(Punto p1, Punto p2) throws Exception {//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();

    }


}
il pannello può essere ridimensionato impostando i valori xMin, xMax, yMin, yMax che vengono inseriti dall'utente. Il problema è che non appena il pannello viene ridimensionato con i nuovi valori, il grafico viene cancellato e rimangono solo gli assi cartesiani. C'è modo di risolvere?