Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Grafici con jfreechart

  1. #1

    Grafici con jfreechart

    Salve ragazzi,

    avrei bisogno di creareun grafico in java prendendo dei valori che ho nel mio DB.

    Leggendo un pò qua e la ho visto che esiste JFreeChart che è una valida librerire per questo ma non riesco a venirne a capo.

    Io devo creare un grafico a barre orizzontali in cui per ogni articolo presente nel mio DB mi mostri quante volte è stato venduto (nro di pezzi venduti) volevo mostrarlo in un grafico.

    Credevo che questo esempio fosse valido ma non riesco a venirne a capo

    codice:
    package Panel;
    
    import java.awt.Color;
    
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.axis.NumberAxis;
    import org.jfree.chart.plot.CategoryPlot;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.data.category.CategoryDataset;
    import org.jfree.data.general.DatasetUtilities;
    import org.jfree.ui.ApplicationFrame;
    import org.jfree.ui.RefineryUtilities;
    
    import esempio.Visualizzazioni;
    
    /**
     * A simple demonstration application showing how to create a horizontal bar chart.
     *
     */
    public class BarChartDemo5 extends ApplicationFrame {
    static Visualizzazioni db;
        /**
         * Creates a new demo instance.
         *
         * @param title  the frame title.
         */
        public BarChartDemo5(final String title) {
    
            super(title);
            final CategoryDataset dataset = createDataset();
            final JFreeChart chart = createChart(dataset);
            final ChartPanel chartPanel = new ChartPanel(chart);
            chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
            setContentPane(chartPanel);
            
        }
    
        /**
         * Creates a sample dataset.
         * 
         * @return A sample dataset.
         */
        private CategoryDataset createDataset() {
            final double[][] data = new double[][] {
                    {1.0, 43.0, 35.0, 58.0, 54.0, 77.0, 71.0, 89.0},
                    {54.0, 75.0, 63.0, 83.0, 43.0, 46.0, 27.0, 13.0},
                    {41.0, 33.0, 22.0, 34.0, 62.0, 32.0, 42.0, 34.0}
            };
            return DatasetUtilities.createCategoryDataset("Series ", "Factor222 ", data);
        }
        
        /**
         * Creates a chart.
         * 
         * @param dataset  the dataset.
         * 
         * @return A chart.
         */
        private JFreeChart createChart(final CategoryDataset dataset) {
            // create the chart...
            final JFreeChart chart = ChartFactory.createBarChart(
                "Prospetto vendite",                 // chart title
                "Prodotti",                  // domain axis label
                "Nro Pz.Venduti",                 // range axis label
                dataset,                     // data
                PlotOrientation.HORIZONTAL,  // orientation
                true,                        // include legend
                true,
                false
            );
    
            // NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...
    
            chart.setBackgroundPaint(Color.lightGray);
    
            // get a reference to the plot for further customisation...
            final CategoryPlot plot = chart.getCategoryPlot();
    
            plot.getRenderer().setSeriesPaint(0, new Color(0, 0, 255));
            plot.getRenderer().setSeriesPaint(1, new Color(75, 75, 255));
            plot.getRenderer().setSeriesPaint(2, new Color(150, 150, 255));
            
            // change the auto tick unit selection to integer units only...
            final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
            rangeAxis.setRange(0.0, 100.0);
            rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
    
           // NumberAxis hna = rangeAxis;
           // MarkerAxisBand band = new MarkerAxisBand(hna, 2.0, 2.0, 2.0, 2.0,
           //     new Font("SansSerif", Font.PLAIN, 9));
    
    //        IntervalMarker m1 = new IntervalMarker(0.0, 33.0, "Low", Color.gray,
    //            new BasicStroke(0.5f), Color.green, 0.75f);
    //        IntervalMarker m2 = new IntervalMarker(33.0, 66.0, "Medium", Color.gray,
    //            new BasicStroke(0.5f), Color.orange, 0.75f);
    //        IntervalMarker m3 = new IntervalMarker(66.0, 100.0, "High", Color.gray,
    //            new BasicStroke(0.5f), Color.red, 0.75f);
    //        band.addMarker(m1);
    //        band.addMarker(m2);
    //        band.addMarker(m3);
    //        hna.setMarkerBand(band);
            // OPTIONAL CUSTOMISATION COMPLETED.
            return chart;
        }
        
       
        /**
         * Starting point for the demonstration application.
         *
         * @param args  ignored.
         */
        public static void main(final String[] args) {
    
            final BarChartDemo5 demo = new BarChartDemo5("Bar Chart Demo 5");
            db = new Visualizzazioni("provaDB");
    	   	try {
    				db.connetti();
    			} catch (InstantiationException e1) {
    				// TODO Auto-generated catch block
    				e1.printStackTrace();
    			} catch (IllegalAccessException e1) {
    				// TODO Auto-generated catch block
    				e1.printStackTrace();
    			}//fine del programma
            demo.pack();
            RefineryUtilities.centerFrameOnScreen(demo);
            demo.setVisible(true);
    
        }
    
    }
    poi lui per default mette come nome ad ogni serie il nome Factor io invece vorrei mettere il nome del mio articolo.....

  2. #2
    Allora ragazzi sono riuscito a prendere i dati dal mio db ed ad inserire il tutto nel mio panel.

    Ora la domanda è:

    al caricamento viene stampato un grafico di default.

    Io voglio che alla pressione di un tasto la query cambia.

    Cioè voglio selezionare gli articoli venduti in un intervallo di tempo.

    Per verificare che i dati siano esatti utilizzo dei system.out.println ed i dati sono corretti, ol problema invece sta nel fatto che il panel che mi viene restituito non viene aggiornato.

    Come posso fare??

    mostro il codice.

    classe per creare il grafico a barre orizzontali
    codice:
    package Panel;
    
    import java.awt.Color;
    import java.util.Date;
    import java.util.Vector;
    
    import javax.swing.JPanel;
    
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.axis.NumberAxis;
    import org.jfree.chart.plot.CategoryPlot;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.data.category.CategoryDataset;
    import org.jfree.data.category.DefaultCategoryDataset;
    import org.jfree.data.general.DatasetUtilities;
    import org.jfree.ui.ApplicationFrame;
    import org.jfree.ui.RefineryUtilities;
    
    import com.toedter.calendar.JDateChooser;
    
    import supporto.Elimina_Caratteri;
    
    import esempio.Visualizzazioni;
    
    /**
     * A simple demonstration application showing how to create a horizontal bar chart.
     *
     */
    public class BarChartDemo5 extends ApplicationFrame {
    static Visualizzazioni db;
    DefaultCategoryDataset dataset;
        /**
         * Creates a new demo instance.
         *
         * @param title  the frame title.
         */
        public BarChartDemo5(final String title) {
    
            super(title);
            final CategoryDataset dataset = createDataset();
            final JFreeChart chart = createChart(dataset);
            final ChartPanel chartPanel = new ChartPanel(chart);
            chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
            setContentPane(chartPanel);
            
        }
        
        public JPanel panel(final String title) {
        	db = new Visualizzazioni("provaDB");
    	   	try {
    				db.connetti();
    			} catch (InstantiationException e1) {
    				// TODO Auto-generated catch block
    				e1.printStackTrace();
    			} catch (IllegalAccessException e1) {
    				// TODO Auto-generated catch block
    				e1.printStackTrace();
    			}//fine del programma
           // super(title);
            final CategoryDataset dataset = createDataset();
            final JFreeChart chart = createChart(dataset);
            final ChartPanel chartPanel = new ChartPanel(chart);
            chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
        //    setContentPane(chartPanel);
    		return chartPanel;
            
        }
        
        public JPanel panelData(final String title, String folderName, String folderName2) {
        	db = new Visualizzazioni("provaDB");
    	   	try {
    				db.connetti();
    			} catch (InstantiationException e1) {
    				// TODO Auto-generated catch block
    				e1.printStackTrace();
    			} catch (IllegalAccessException e1) {
    				// TODO Auto-generated catch block
    				e1.printStackTrace();
    			}//fine del programma
           // super(title);
            final CategoryDataset dataset = createDatasetData(folderName, folderName2);
            final JFreeChart chart = createChart(dataset);
            final ChartPanel chartPanel = new ChartPanel(chart);
            chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
        //    setContentPane(chartPanel);
    		return chartPanel;
            
        }
    
        private CategoryDataset createDatasetData(String folderName, String folderName2) {
    		// TODO Auto-generated method stub
    		Elimina_Caratteri elimina = new Elimina_Caratteri();
    	    
            final String series1 = "Articoli";
            Vector v=db.eseguiQuery("SELECT NomeArticolo, SUM(quantita) FROM Scontrini,codSCONTRINI WHERE NOMEARTICOLO = NOMEARTICOLO and Scontrini.CodScontrino = codSCONTRINI.codscontrino and data >= '"+folderName+"' and data<= '"+folderName2+"' GROUP BY NomeArticolo");
            System.out.println("vettore data "+v);
            dataset = new DefaultCategoryDataset();
        for(int i=0; i< v.size(); i++){
           String coppia = v.get(i).toString();
           coppia=elimina.Elimina_Caratteri(coppia); 
            String[] arr = coppia.split(", ");
       
    	    String nomearticolo = arr[0] +" ("+arr[1]+")";
    
            dataset.addValue(Double.parseDouble(arr[1]), series1, nomearticolo);
    
    
    }
    return dataset;
    	}
    
    	/**
         * Creates a sample dataset.
         * 
         * @return A sample dataset.
         */
        private CategoryDataset createDataset() {
        	Elimina_Caratteri elimina = new Elimina_Caratteri();
         /*   final double[][] data = new double[][] {
                    {1.0, 43.0, 35.0, 58.0, 54.0, 77.0, 71.0, 89.0},
                    {54.0, 75.0, 63.0, 83.0, 43.0, 46.0, 27.0, 13.0},
                    {41.0, 33.0, 22.0, 34.0, 62.0, 32.0, 42.0, 34.0}
            };
            
            return DatasetUtilities.createCategoryDataset("Series ", "Factor222 ", data);*/
        	final String series1 = "Articoli";
         /*   final String series2 = "Second";
            final String series3 = "Third";*/
            Vector v=db.eseguiQuery("SELECT NomeArticolo, SUM(quantita) FROM Scontrini WHERE NOMEARTICOLO = NOMEARTICOLO GROUP BY NomeArticolo");
            dataset = new DefaultCategoryDataset();
            for(int i=0; i< v.size(); i++){
    
               String coppia = v.get(i).toString();
    
               coppia=elimina.Elimina_Caratteri(coppia); 
               String[] arr = coppia.split(", ");
               
            	String nomearticolo = arr[0] +" ("+arr[1]+")";
    
            
    
            dataset.addValue(Double.parseDouble(arr[1]), series1, nomearticolo);
    
            }
            return dataset;
        }
        
        /**
         * Creates a chart.
         * 
         * @param dataset  the dataset.
         * 
         * @return A chart.
         */
        private JFreeChart createChart(final CategoryDataset dataset) {
            // create the chart...
            final JFreeChart chart = ChartFactory.createBarChart(
                "Prospetto vendite",                 // chart title
                "Prodotti",                  // domain axis label
                "Nro Pz.Venduti",                 // range axis label
                dataset,                     // data
                PlotOrientation.HORIZONTAL,  // orientation
                true,                        // include legend
                true,
                false
            );
    
            // NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...
    
            chart.setBackgroundPaint(Color.lightGray);
    
            // get a reference to the plot for further customisation...
            final CategoryPlot plot = chart.getCategoryPlot();
    
            plot.getRenderer().setSeriesPaint(0, new Color(0, 0, 255));
            plot.getRenderer().setSeriesPaint(1, new Color(75, 75, 255));
            plot.getRenderer().setSeriesPaint(2, new Color(150, 150, 255));
            
            // change the auto tick unit selection to integer units only...
            final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
            
            rangeAxis.setRange(0.0, 100.0);
            rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
    
           // NumberAxis hna = rangeAxis;
           // MarkerAxisBand band = new MarkerAxisBand(hna, 2.0, 2.0, 2.0, 2.0,
           //     new Font("SansSerif", Font.PLAIN, 9));
    
    //        IntervalMarker m1 = new IntervalMarker(0.0, 33.0, "Low", Color.gray,
    //            new BasicStroke(0.5f), Color.green, 0.75f);
    //        IntervalMarker m2 = new IntervalMarker(33.0, 66.0, "Medium", Color.gray,
    //            new BasicStroke(0.5f), Color.orange, 0.75f);
    //        IntervalMarker m3 = new IntervalMarker(66.0, 100.0, "High", Color.gray,
    //            new BasicStroke(0.5f), Color.red, 0.75f);
    //        band.addMarker(m1);
    //        band.addMarker(m2);
    //        band.addMarker(m3);
    //        hna.setMarkerBand(band);
            // OPTIONAL CUSTOMISATION COMPLETED.
            return chart;
        }
        
       
        /**
         * Starting point for the demonstration application.
         *
         * @param args  ignored.
         */
        public static void main(final String[] args) {
        	
            final BarChartDemo5 demo = new BarChartDemo5("Bar Chart Demo 5");
            demo.pack();
            RefineryUtilities.centerFrameOnScreen(demo);
            demo.setVisible(true);
    
        }
    
    }
    lo istanzio così:

    demo = new BarChartDemo5("Bar Chart Demo 5");
    panelGrafico = demo.panelData("Ciccio", folderName, folderName2);

    dove folderName,folderName2 sono le data in formato testo ("2011-10-10")

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.