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.