• Viernes 8 de Noviembre de 2024, 00:39

Autor Tema:  Duda Sobre Librería Jfreechart  (Leído 4679 veces)

ropel

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Duda Sobre Librería Jfreechart
« en: Domingo 20 de Abril de 2008, 13:42 »
0
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

  • Miembro MUY activo
  • ***
  • Mensajes: 203
  • Nacionalidad: cr
    • Ver Perfil
    • http://apuntes.delibertad.com
Re: Duda Sobre Librería Jfreechart
« Respuesta #1 en: Domingo 20 de Abril de 2008, 21:58 »
0
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
  1.  
  2. public BufferedImage creaImagen(){
  3.     XYSeries series = new XYSeries("Evolucion");
  4.     series.add(1, 23);
  5.     series.add(2, 34);
  6.     series.add(3, 51);
  7.     //series ....
  8.     XYDataset juegoDatos= new XYSeriesCollection(series);      
  9.     JFreeChart chart = ChartFactory.createLineXYChart("Sesiones en Adictos al Trabajo",  
  10.     "Meses","Sesiones",juegoDatos,PlotOrientation.VERTICAL,false, false, true);        
  11.     BufferedImage image = chart.createBufferedImage(300,300);  
  12.     return image;
  13.  }
  14.  

luego sobre escribimos el metodo de la clase jpanel:
Código: Text
  1.  
  2. BufferedImage grafica = null;
  3.  
  4. public void paint(java.awt.Graphics g) {
  5.    if(grafica == null){
  6.        grafica = this.creaImagen();
  7.    }
  8.    g.drawImage(grafica,30,30,null);
  9. }
  10.  

frealgagu

  • Miembro activo
  • **
  • Mensajes: 49
    • Ver Perfil
    • http://frealgagu.4shared.com
Re: Duda Sobre Librería Jfreechart
« Respuesta #2 en: Lunes 21 de Abril de 2008, 05:13 »
0
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

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Duda Sobre Librería Jfreechart
« Respuesta #3 en: Martes 22 de Abril de 2008, 20:08 »
0
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

  • Miembro activo
  • **
  • Mensajes: 49
    • Ver Perfil
    • http://frealgagu.4shared.com
Re: Duda Sobre Librería Jfreechart
« Respuesta #4 en: Martes 22 de Abril de 2008, 21:42 »
0
Ok, voy a explicar un poco mejor como utilizar un gráfico dentro de un JPanel:

Código: Text
  1.  
  2. import org.jfree.data.*;
  3. import org.jfree.data.xy.*;
  4. import org.jfree.chart.*;
  5. import org.jfree.chart.plot.*;
  6. import javax.swing.*;
  7. import java.io.*;
  8. import java.awt.*;
  9. import java.awt.image.*;
  10. import java.awt.event.*;
  11.  
  12. public class ventanaGrafica extends JPanel
  13. {
  14.    
  15.   BufferedImage grafica = null;
  16.    
  17.   public ventanaGrafica()
  18.   {
  19.    
  20.   }
  21.    
  22.   public static void main(String args[])
  23.   {
  24.     JFrame ventana=new JFrame("Ejemplo");    
  25.     ventanaGrafica panel = new ventanaGrafica();
  26.     ventana.getContentPane().add(panel);
  27.     ventana.addWindowListener(new WindowAdapter() {
  28.             public void windowClosing(WindowEvent e) {
  29.                 System.exit(0);
  30.             }
  31.         });
  32.   ventana.pack();
  33.   ventana.setSize(400,400);  
  34.     ventana.show();
  35.    
  36.   }
  37.  
  38.   public BufferedImage creaImagen()
  39.   {
  40.     XYSeries series = new XYSeries("Evolucion");
  41.     series.add(1, 23);
  42.     series.add(2, 34);
  43.     series.add(3, 51);
  44.     series.add(4, 67);
  45.     series.add(5, 89);
  46.     series.add(6, 121);
  47.     series.add(7, 137);
  48.     XYDataset juegoDatos= new XYSeriesCollection(series);
  49.     JFreeChart chart = ChartFactory.createXYLineChart("Titulo","Eje Y","Eje X",juegoDatos,PlotOrientation.VERTICAL,false,false,true);
  50.            
  51.     BufferedImage image = chart.createBufferedImage(300,300);  
  52.      return image;
  53.  }
  54.  
  55.  public void paint(java.awt.Graphics g) {
  56.    if(grafica == null)
  57.    {
  58.      grafica = this.creaImagen();
  59.    }
  60.   g.drawImage(grafica,30,30,null);
  61.  }
  62.        
  63. }
  64.  
  65.  

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.


frealgagu

  • Miembro activo
  • **
  • Mensajes: 49
    • Ver Perfil
    • http://frealgagu.4shared.com
Re: Duda Sobre Librería Jfreechart
« Respuesta #5 en: Martes 22 de Abril de 2008, 21:53 »
0
Ahora que si lo que quiere es no utilizar el método paint(), puede utilizar un JLabel para mostrar dentro del JPanel añdiendo esta parte al código al constructor del JPanel

Código: Text
  1.  
  2. public class ventanaGrafica extends JPanel
  3. {
  4.    
  5.   BufferedImage grafica = null;
  6.   JLabel etiqueta;
  7.    
  8.   public ventanaGrafica()
  9.   {
  10.     etiqueta=new JLabel();
  11.     add(etiqueta);
  12.     grafica=this.creaImagen();
  13.     etiqueta.setIcon((Icon)new ImageIcon(grafica));
  14.   }
  15.    
  16.   public static void main(String args[])
  17.   ......
  18.   .....
  19.  
  20.  
En la cualcreo un JLabel y lo añado al JPanel mediante add(), luego creo la imagen en el BufferedImage normalmente con el metodo creaImagen() y por último hago que el JLabel me muestre un a imagen mediante setIcon().
En realidad BufferedImage como hereda de Image, puedo crear un nuevo ImageIcon con "grafica", y luego lo convierto a Icon y se lo agrego a etiqueta mediante setIcon.
Aquí le coloco el código completo por si hubo algún error al pasarlo acá:
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.


ropel

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Duda Sobre Librería Jfreechart
« Respuesta #6 en: Martes 22 de Abril de 2008, 22:42 »
0
Gracias por tu ayuda, me ha servido de mucho. Ya he solucionado el problema.

Saludos.

tinchote7

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Duda Sobre Librería Jfreechart
« Respuesta #7 en: Domingo 19 de Septiembre de 2010, 20:41 »
0
necesito el codigo... tengo el mismoproblema... gracias