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

Rispondi quotando