Salve, devo realizzare dei grafici di funzioni matematiche e rappresentare valori calcolati mediante la statistica sempre in dei grafici. qualcuno conosce qualche guida in particolare? in rete ho fatto qualche ricerca ma non so da dove iniziare...
Salve, devo realizzare dei grafici di funzioni matematiche e rappresentare valori calcolati mediante la statistica sempre in dei grafici. qualcuno conosce qualche guida in particolare? in rete ho fatto qualche ricerca ma non so da dove iniziare...
Le cose sono due: o utilizzi una libreria apposita per i grafici (ce ne sono, ad esempio JFreeChart ma non è immediatissima da usare) oppure fai tutto "a mano" andando a disegnare su un componente (in Swing tipicamente estendendo JPanel) utilizzando la tecnica del custom painting.
Dipende comunque molto dal tipo di grafico, dal livello di qualità e di adattamento/generalizzazione che vuoi ottenere. Magari spiega meglio, a parole (o con un disegnino), cosa vuoi realizzare.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
premetto che su questo campo non so praticamente nulla...quello che serve a me è qualcosa di molto sempre e deve rappresentare graficamente i dati calcolati, per esempio disegnare una retta sul piano cartesiamo mi calcolo i dati necessati, usado anche formule, e poi li grafico. Non cerco requisiti alti al momento. Spero di essere stato chiaro, grazie.
JFreeChart praticamente non la conosco (avevo fatto qualcosa ma tanti tanti anni fa). Quindi su questa libreria non saprei dirti di più (e non ne conosco altre per i grafici).
La soluzione del custom painting è fattibile, se non hai bisogno di chissà che cosa, ma richiede che tu abbia le idee abbastanza chiare su come funziona il painting in Swing nei componenti, come applicarlo correttamente e come usare gli oggetti Graphics/Graphics2D.
Nulla di impossibile, ovviamente, ma se parti praticamente da zero è più difficile.
Se sai l'inglese, puoi vedere il tutorial ufficiale:
- Performing Custom Painting
- 2D Graphics
Se hai dubbi chiedi pure, questa "materia" la conosco molto bene.(e trovi esempi sul custom painting tra i miei Java Examples)
Ultima modifica di andbin; 25-07-2015 a 18:26
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
ho dato un occhiata ai link...diciamo che mi sono fatto qualche idea...comunque un ultriore problema è come dare i valori al grafico, mi spiego meglio: usando il metodo drawLine ottengo due punto e traccio la retta perfetto. Ma questi due punti li calcolo in un metodo apparte usando valori inseriti da tastiera, il metodo in questione è. Ho letto che drawLine usa setX# ma non idea di come posso usarlo con il metodo setRegres visto che con quest'ultimo ottengo tutti e quattro i punticodice:public void setRegress( float c, float v, float avgX, float avgY ){
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);