Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di Ironmax
    Registrato dal
    Dec 2008
    Messaggi
    1,026

    Inserire JFreeChart e ChartPanel in un frame costruito con windowbuilder

    Buongiorno.
    Sto lavorando con il plugin di eclipse WindowBuilder e dentro ad un frame vorrei inserire un oggetto di tipo ChartPanel in modo che mi visualizzi il grafico all'interno della finestra.
    File provagrafici:
    codice:
    package grafici;
    
    import java.io.File;
    import java.io.IOException;
    import java.text.NumberFormat;
    import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.ChartUtilities;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.labels.StandardXYItemLabelGenerator;
    import org.jfree.chart.labels.XYItemLabelGenerator;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.chart.plot.XYPlot;
    import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
    import org.jfree.data.xy.XYDataset;
    import org.jfree.data.xy.XYSeries;
    import org.jfree.data.xy.XYSeriesCollection;
    import org.jfree.ui.ApplicationFrame;
    import org.jfree.ui.RefineryUtilities;
    
    public class GraficoALinea extends ApplicationFrame {
        public GraficoALinea(final String titolo) {
            super(titolo);
            final XYDataset dataset = createDataset();
            final JFreeChart chart = createChart(dataset);
            final ChartPanel chartPanel = new ChartPanel(chart);
            chartPanel.setPreferredSize(new java.awt.Dimension(700, 470));
            setContentPane(chartPanel);
            /*
             * try { ChartUtilities.saveChartAsPNG(new
             * File("C:\\_jee_juno_programmi\\grafici\\lineaFrame.png"), chart,
             * 1024, 768); } catch (IOException ex) {
             * System.out.println(ex.getLocalizedMessage()); }
             */
        }
    
        /**
         * Creazione del dataset da utilizzare per la generazione del grafi Ogni
         * grafico ha un suo dataset specifico
         * 
         * @return un dataset di default.
         */
        private XYDataset createDataset() {
            final XYSeries dataset = new XYSeries("Dati");
            dataset.add(1, 1);
            dataset.add(2, 5);
            dataset.add(3, -3);
            dataset.add(4, 0);
            dataset.add(5, 9);
            dataset.add(6, 15);
            return new XYSeriesCollection(dataset);
        }
    
        /**
         * Metodo deputato alla creazione del grafico.
         * 
         * @param dataset
         *            il dataset creato dal metodo createDataset
         * @return il grafico.
         */
        private JFreeChart createChart(final XYDataset dataset) {
            final JFreeChart chart = ChartFactory.createXYLineChart("Grafico a Linea", // titolo
                    "Label", // label asse delle X
                    "Valori", // label asse dell Y
                    dataset, // sorgente dei dati
                    PlotOrientation.VERTICAL, // orientamento del grafico
                    true, // mostra la legenda
                    true, // usa i tooltip
                    false);
            XYPlot plot = (XYPlot) chart.getPlot();
            XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(true, true);
            plot.setRenderer(renderer);
            renderer.setBaseShapesVisible(true);
            renderer.setBaseShapesFilled(true);
            NumberFormat format = NumberFormat.getNumberInstance();
            format.setMaximumFractionDigits(2);
            XYItemLabelGenerator generator = new StandardXYItemLabelGenerator(
                    StandardXYItemLabelGenerator.DEFAULT_ITEM_LABEL_FORMAT, format, format);
            renderer.setBaseItemLabelGenerator(generator);
            renderer.setBaseItemLabelsVisible(true);
            return chart;
        }
    }
    File Provagrafici.java
    codice:
    package grafici;
    
    import java.awt.EventQueue;
    
    import javax.swing.JFrame;
    
    import org.jfree.chart.ChartPanel;
    import org.jfree.ui.RefineryUtilities;
    
    import java.awt.Panel;
    import javax.swing.JPanel;
    import java.awt.Color;
    
    public class Provagrafici {
    
        private JFrame frame;
    
        /**
         * Launch the application.
         */
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        Provagrafici window = new Provagrafici();
                        window.frame.setVisible(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    
        /**
         * Create the application.
         */
        public Provagrafici() {
            initialize();
        }
    
        /**
         * Initialize the contents of the frame.
         */
        private void initialize() {
            frame = new JFrame();
            frame.setBounds(100, 100, 450, 300);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.getContentPane().setLayout(null);
            
            
            
            final GraficoALinea demo = new GraficoALinea(
                    "Grafici al gusto di caffè");
            demo.pack();
            
            
            RefineryUtilities.centerFrameOnScreen(demo);
            demo.setVisible(true);
            
            JPanel panel = new JPanel();
        
            panel.setBackground(Color.GREEN);
            panel.setBounds(128, 97, 80, 85);
        grafico_frame.jpg
            frame.getContentPane().add(panel);
            
            
            //panel.add(demo);
            //frame.getContentPane().add(demo.pack());
        }
    }
    Nell'immagine che ho postato vorrei inserire il grafico JFreeChart e ChartPane all'interno del frame di windowbuilder nel pannello verde.
    Si può? Ci sono componenti in windowbuilder che posso utilizzare i grafici?
    Grazie.

  2. #2
    non ti viene più semplice caricare tutto in un JPanel e comporre la tua finestra con i pannelli richiesti?
    io ho fatto così e la mia la classe era la XYSplineGraph e questa era la dichiarazione

    public class XYSplineGraph extends JPanel implements ChartMouseListener

    Poi ho caricato il mio JPanel in un JInternalFrame perché il mio programma aveva un JDesktopPane quindi non avevo scelta, ma tu puoi caricarlo normalmente in un JFrame.

    Ciao.
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  3. #3
    Utente di HTML.it L'avatar di Ironmax
    Registrato dal
    Dec 2008
    Messaggi
    1,026
    Quote Originariamente inviata da schumy2000 Visualizza il messaggio
    non ti viene più semplice caricare tutto in un JPanel e comporre la tua finestra con i pannelli richiesti?
    io ho fatto così e la mia la classe era la XYSplineGraph e questa era la dichiarazione

    public class XYSplineGraph extends JPanel implements ChartMouseListener

    Poi ho caricato il mio JPanel in un JInternalFrame perché il mio programma aveva un JDesktopPane quindi non avevo scelta, ma tu puoi caricarlo normalmente in un JFrame.

    Ciao.
    Grazie per il suggerimento. Però potresti postare un frammento di codice, giusto per capire meglio, sono i primi esperimenti che sto facendo.

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.