Programación General > Java
Duda Sobre Librería Jfreechart
ropel:
Hola,
¿Cómo puedo añadir a un JPanel en Swing un gráfico realizado mediante la librería JFreeChart? He intentado mediante el método común "add" pero me da error. Necesito mostrar dentro de un JPanel determinado el gráfico, y no se me ocurre idea alguna de cómo implementar lo que pretendo.
Espero que alguien me pueda echar una mano. Gracias de antemano.
Un saludo.
manix:
Bueno casi no he trabajado con ese componente pero porque no intentas sobreescribir el metodo paint() de la clase JPanel:
primero hacemos un metodo para crear el grafico:
--- Código: Text --- public BufferedImage creaImagen(){ XYSeries series = new XYSeries("Evolucion"); series.add(1, 23); series.add(2, 34); series.add(3, 51); //series .... XYDataset juegoDatos= new XYSeriesCollection(series); JFreeChart chart = ChartFactory.createLineXYChart("Sesiones en Adictos al Trabajo", "Meses","Sesiones",juegoDatos,PlotOrientation.VERTICAL,false, false, true); BufferedImage image = chart.createBufferedImage(300,300); return image; }
luego sobre escribimos el metodo de la clase jpanel:
--- Código: Text --- BufferedImage grafica = null; public void paint(java.awt.Graphics g) { if(grafica == null){ grafica = this.creaImagen(); } g.drawImage(grafica,30,30,null);}
frealgagu:
Es muy sencillo agregar a un JPanel un gráfico de la librería JFreeChart y es mediante la clase ChartPanel incluida dentro del mismo paquete.
JFreeChart chart;
.
.
.
JPanel panel = new ChartPanel(chart);
Así en el momento de crear el Jpanel se le puede enviar un nuevo ChartPanel con el objeto chart que es de tipo JFreeChart.
Como bien se sabe un JPanel si puede contener otro JPanel, por lo que no habría ningún problema ejecuntando este código.
objetoClasePrincipal.add(panel);
ropel:
pero....¿cómo puedo mostrar el gráfico así si no se pinta???? yo hasta ahora lo había convertido en BufferedImage, y así lo había pintado, pero mediante un ChartPanel, ¿cómo lo puedo hacer?
Espero tu ayuda por favor....
frealgagu:
Ok, voy a explicar un poco mejor como utilizar un gráfico dentro de un JPanel:
--- Código: Text --- import org.jfree.data.*;import org.jfree.data.xy.*;import org.jfree.chart.*;import org.jfree.chart.plot.*;import javax.swing.*;import java.io.*;import java.awt.*;import java.awt.image.*;import java.awt.event.*; public class ventanaGrafica extends JPanel{ BufferedImage grafica = null; public ventanaGrafica() { } public static void main(String args[]) { JFrame ventana=new JFrame("Ejemplo"); ventanaGrafica panel = new ventanaGrafica(); ventana.getContentPane().add(panel); ventana.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); ventana.pack(); ventana.setSize(400,400); ventana.show(); } public BufferedImage creaImagen() { XYSeries series = new XYSeries("Evolucion"); series.add(1, 23); series.add(2, 34); series.add(3, 51); series.add(4, 67); series.add(5, 89); series.add(6, 121); series.add(7, 137); XYDataset juegoDatos= new XYSeriesCollection(series); JFreeChart chart = ChartFactory.createXYLineChart("Titulo","Eje Y","Eje X",juegoDatos,PlotOrientation.VERTICAL,false,false,true); BufferedImage image = chart.createBufferedImage(300,300); return image; } public void paint(java.awt.Graphics g) { if(grafica == null) { grafica = this.creaImagen(); } g.drawImage(grafica,30,30,null); } }
Bueno, en realidad coloqué el Jpanel principal dentro de un JFrame que sería lo más lógico.
Este es un código sencillo para la creación de una gráfica 2D con determinados valores, mostrándolos mediante la función paint() del JPanel, tal como lo decía manix (en realidad es el código completo de manix, aunque originalmente venía para un Frame normal y yo lo adapté para que funcionara para un JPanel), que me pareció la mejor forma de implementarlo.
Navegación
[#] Página Siguiente
Ir a la versión completa