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:
File Provagrafici.javacodice: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; } }
Nell'immagine che ho postato vorrei inserire il grafico JFreeChart e ChartPane all'interno del frame di windowbuilder nel pannello verde.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()); } }
Si può? Ci sono componenti in windowbuilder che posso utilizzare i grafici?
Grazie.

Rispondi quotando
