Purtroppo mi viene da pensare che hai (ancora) le idee un po' confuse su come gestire il painting nei componenti. E non hai postato alcun codice, per cui non saprei nemmeno dire se quanto hai fatto è corretto/appropriato oppure no.
Il minimo che puoi e dovresti fare è creare una classe che estende (tipico) JPanel e in cui fai l'override di paintComponent in cui disegni tutto il grafico. Poi questa tua classe può offrire metodi extra, tipo setValoriGrafico, resetGrafico, ecc.... che ovviamente servono a impostare e gestire il grafico. Un setValoriGrafico potrebbe ricevere un array di double o un array di oggetti Punto o altro, dipende dal concetto del grafico da rappresentare (nel tuo caso non ho ancora capito bene...). All'interno del metodo imposti la struttura dati interna alla classe e poi chiedi un repaint() affinché il paintComponent venga invocato successivamente per ridisegnare tutto il grafico.
Questo, come si dice, è il "minimo sindacale" che si può fare. Poi si possono applicare tutta una serie di ottimizzazioni: una immagine off-screen di buffer, la possibilità di fare aggiunte "incrementali" al grafico, ecc... E si può realizzare il tutto nell'ottica MVC (Model-View-Controller) facendo una classe di "model" che contiene solo i dati e separatamente la classe che estende JPanel che si occupa solo della visualizzazione. Tutto questo comunque è di più, oltre al minimo che puoi fare.
Comunque, cercherò sicuramente appena posso di creare un esempio di grafico, perché credo possa essere utile.![]()
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
hai ragione...posto qui il codice che ho fatto:
questa parte è per disegnare la rettaquesto metodo invece è quello che uso quando calcolo i valori che mi servono per la retta:codice:public class Graphics0 extends JFrame { static Graphics0 frame; public int x1; public int x2; public int y1; public int y2; public Graphics0 (String title){ super(title); setBackground(Color.white); setSize(480,200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); } public void drawLines(Graphics g) { Graphics2D g2d = (Graphics2D) g; g2d.drawLine(x1,y1,x2,y2); } public void paint(Graphics g) { super.paint(g); drawLines(g); } public void setLine( float X1,float X2,float Y1,float Y2 ){ x1=(int)X1; x2=(int)X2; y1=(int)Y1; y2=(int)Y2; }
codice:public void setRegress( float c, float v, float avgX, float avgY ){ int x1= (int)(Math.random()*100); int x2= (int)(Math.random()*200)+50; float m = c / v; float q = avgY - ( m * avgX ); float y1=m*x1+q; float y2=m*x1+q; String tmp = "( m = " + m + ", q = " + q + " )"; regress.setText( tmp ); Graphics0 frame = new Graphics0("Retta"); frame.setLine(x1,x2,y1,y2); frame.setVisible(true);