Jfreechart

cs_thanatos67 Messages postés 51 Date d'inscription vendredi 3 décembre 2004 Statut Membre Dernière intervention 13 novembre 2008 - 27 mars 2007 à 16:28
cs_gattous Messages postés 100 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 7 octobre 2007 - 7 avril 2007 à 22:03
Salutation.

J'ai une application qui génère un tableau avec des données météorologiques stockées dans une base Mysql (qui fonctionne).
Je dois aussi créer un graphique à axes multiples (pour chaque colonnes) avec JFREECHART et le mettre dans un JPanel. Le problème c'est que je n'ai pas d'exemple pour le générer à partir des données Mysql.
Voilà ce que j'ai pour le moment :

private JCheckBox getJCBTempInt() {
        if (jCBTempInt == null) {
            jCBTempInt = new JCheckBox();
            jCBTempInt.setBounds(new Rectangle(15, 105, 166, 26));
            jCBTempInt.setText("Température Interne");
            jCBTempInt.setFont(new Font("Dialog", Font.BOLD, 12));
            jCBTempInt.setBackground(new Color(204, 204, 204));
            jCBTempInt.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
                    chart = ChartFactory.createXYLineChart("Graphique meteo", "date", "donnees", xyDataset, PlotOrientation.VERTICAL, true, true, true);
                    chart.setBackgroundPaint(java.awt.Color.white);
                    plot = chart.getXYPlot();
                    org.jdom.Document document = null;
                    Element racine = null;
                    SAXBuilder sxb = new SAXBuilder();
                    jTTableau.setModel(tableModel);
                   
                    try{
                        //On crée un nouveau document JDOM avec en argument le fichier XML
                        //Le parsing est terminé
                        document = sxb.build(new File("c:/Program Files/MeteoStat2007/connexion.xml"));
                    }
                    catch(Exception jdm) {
                        jdm.printStackTrace();
                    }
                    racine = document.getRootElement(); //balise <connexion>
                    Element filsDeRacine = racine.getChild("mysql"); // balise <mysql>
                    String host = filsDeRacine.getChild("host").getText();
                    String base = filsDeRacine.getChild("base").getText();
                    try{
                        sql = "select date_saisie,humidite,precipitation,pression,temp_interne,temp_externe,direct_vent,vit_vent from journalier where date_saisie between '"+date_origine+"' and '"+date_final+"';";           //la requete sql pour les données de ma base
                        conn = DriverManager.getConnection("jdbc:mysql://"+host+"/"+base+"?user=admin&password=jarod");
                        xyDataset = new JDBCXYDataset(conn);
                        xyDataset.executeQuery(sql);
                        conn.close();
                    }
                    catch(SQLException ex){
                        JOptionPane.showMessageDialog(null, "select loupé", "Message d'avertissement", JOptionPane.ERROR_MESSAGE);
                        System.out.println("SQLException: " + ex.getMessage());
                        System.out.println("SQLState: " + ex.getSQLState());
                        System.out.println("VendorError: " + ex.getErrorCode());
                    }
                }
            });
        }
        return jCBTempInt;
    }

J'ai mis en vert ce qui fonctionne. Le reste concerne jfreechart. Si vous pouviez m'aider à completer le code, ou me donner un exemple, je vous en serais tres reconnaissant.

Merci d'avance.

au bout du clavier...

4 réponses

cs_thanatos67 Messages postés 51 Date d'inscription vendredi 3 décembre 2004 Statut Membre Dernière intervention 13 novembre 2008
27 mars 2007 à 16:30
Petite modification concernant le code :

private JCheckBox getJCBTempInt() {
        if (jCBTempInt == null) {
            jCBTempInt = new JCheckBox();
            jCBTempInt.setBounds(new Rectangle(15, 105, 166, 26));
            jCBTempInt.setText("Température Interne");
            jCBTempInt.setFont(new Font("Dialog", Font.BOLD, 12));
            jCBTempInt.setBackground(new Color(204, 204, 204));
            jCBTempInt.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
   
                chart = ChartFactory.createXYLineChart("Graphique
meteo", "date", "donnees", xyDataset, PlotOrientation.VERTICAL, true,
true, true);
                    chart.setBackgroundPaint(java.awt.Color.white);
                    plot = chart.getXYPlot();
                    org.jdom.Document document = null;
                    Element racine = null;
                    SAXBuilder sxb = new SAXBuilder();
                    jTTableau.setModel(tableModel);
                   
                    try{
                        //On crée un nouveau document JDOM avec en argument le fichier XML
                        //Le parsing est terminé
                        document = sxb.build(new File("c:/Program Files/MeteoStat2007/connexion.xml"));
                    }
                    catch(Exception jdm) {
                        jdm.printStackTrace();
                    }
                    racine = document.getRootElement(); //balise <connexion>
                    Element filsDeRacine = racine.getChild("mysql"); // balise <mysql>
                    String host = filsDeRacine.getChild("host").getText();
                    String base = filsDeRacine.getChild("base").getText();
                    try{
   
                    sql = "select
date_saisie,humidite,precipitation,pression,temp_interne,temp_externe,direct_vent,vit_vent
from journalier where date_saisie between '"+date_origine+"' and
'"+date_final+"';";           //la requete sql pour les données de ma
base
                        conn = DriverManager.getConnection("jdbc:mysql://"+host+"/"+base+"?user=admin&password=jarod");
                        xyDataset = new JDBCXYDataset(conn);
                        xyDataset.executeQuery(sql);
                        conn.close();
                    }
                    catch(SQLException ex){
   
                    JOptionPane.showMessageDialog(null, "select loupé",
"Message d'avertissement", JOptionPane.ERROR_MESSAGE);
                        System.out.println("SQLException: " + ex.getMessage());
                        System.out.println("SQLState: " + ex.getSQLState());
                        System.out.println("VendorError: " + ex.getErrorCode());
                    }
                }
            });
        }
        return jCBTempInt;
    }

Voila. merci d'avance.

au bout du clavier...
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
29 mars 2007 à 16:32
Ca semble juste, quel est le probleme exactement ?!!!
Perso je me serai assuré de l existance du Dataset avant de le fournir au Chart par contre...

Sinon vu le nmobre de series que tu utilise ;o) j espere que la table ne contient pas trop de donées ... sinon ca va ramer ton truc ;o) ou alors tu vas exploser la mémoire alloué à la VM ... ;o)... je trouve JFreeChart assé peu adapté à l exploitation de données provenant de SGBDR .

[purple]GodConan/purple[:o)]
0
cs_gattous Messages postés 100 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 7 octobre 2007
7 avril 2007 à 21:56
bon, je crois que t'aurais dû remplir ta dataset avant de créer l'objet chart, pour que ton code devienne par exple :
private JCheckBox getJCBTempInt() {
        if (jCBTempInt == null) {
            jCBTempInt = new JCheckBox();
            jCBTempInt.setBounds(new Rectangle(15, 105, 166, 26));
            jCBTempInt.setText("Température Interne");
            jCBTempInt.setFont(new Font("Dialog", Font.BOLD, 12));
            jCBTempInt.setBackground(new Color(204, 204, 204));
            jCBTempInt.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
// ici t'as créé ta chart, avec comme dataset l xyDataset non encore remplie de données
   /*                 chart
= ChartFactory.createXYLineChart("Graphique meteo", "date", "donnees",
xyDataset, PlotOrientation.VERTICAL, true, true, true);
                    chart.setBackgroundPaint(java.awt.Color.white);
                    plot = chart.getXYPlot(); */
                    org.jdom.Document document = null;
                    Element racine = null;
                    SAXBuilder sxb = new SAXBuilder();
                    jTTableau.setModel(tableModel);
                   
                    try{
                        //On crée un nouveau document JDOM avec en argument le fichier XML
                        //Le parsing est terminé
                        document = sxb.build(new File("c:/Program Files/MeteoStat2007/connexion.xml"));
                    }
                    catch(Exception jdm) {
                        jdm.printStackTrace();
                    }
                    racine = document.getRootElement(); //balise <connexion>
                    Element filsDeRacine = racine.getChild("mysql"); // balise <mysql>
                    String host = filsDeRacine.getChild("host").getText();
                    String base = filsDeRacine.getChild("base").getText();
                    try{
   
                    sql = "select
date_saisie,humidite,precipitation,pression,temp_interne,temp_externe,direct_vent,vit_vent
from journalier where date_saisie between '"+date_origine+"' and
'"+date_final+"';";           //la requete sql pour les données de ma
base
                        conn = DriverManager.getConnection("jdbc:mysql://"+host+"/"+base+"?user=admin&password=jarod");
// ici t'as rempli ta dataset                  
    xyDataset = new JDBCXYDataset(conn);
                        xyDataset.executeQuery(sql);
// donc c'est apres cette étape que tu devras placer le code placé en commentaire là-haut
// et suivant ce que tu veux ke ton pgm fasse en cas d'exception, si tu veu créer la chart quoi que //ce soit le résultat, place ton code aprés le catch, sinon place le directement ici..;
                        conn.close();
                    }
                    catch(SQLException ex){
   
                    JOptionPane.showMessageDialog(null, "select loupé",
"Message d'avertissement", JOptionPane.ERROR_MESSAGE);
                        System.out.println("SQLException: " + ex.getMessage());
                        System.out.println("SQLState: " + ex.getSQLState());
                        System.out.println("VendorError: " + ex.getErrorCode());
                    }
                }
            });
        }
        return jCBTempInt;
    }
0
cs_gattous Messages postés 100 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 7 octobre 2007
7 avril 2007 à 22:03
je suis d'accord avec GodConan sur le pt que JFreeChart n'est pas assez adapté pour l'exploitation directe des données existantes dans des bases de donnés, perso je préfére toujours extraire mes données dans des listes, les  traiter, puis les  exploiter avec JFreeChart..
0
Rejoignez-nous