IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

JFreeChart : insérer graphe dans un JPanel


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 18
    Points : 15
    Points
    15
    Par défaut JFreeChart : insérer graphe dans un JPanel
    Bonjour,

    Je souhaite juste créer un graphique et l'insérer dans un JPanel.
    J'ai créé un classe java "graphique" qui hérite de la classe JPanel comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
     
    public class Graphique extends JPanel {
     
    	public Graphique(double cpm1, int temps1, double cpm2,
    			double temps2, double cpm3, double temps3, double cpm4,
    			double temps4) {
     
     
    		final XYDataset dataset = createDataset(cpm1, temps1,
    				cpm2, temps2, cpm3, temps4, cpm4,
    				temps4);
    		final JFreeChart chart = createChart(dataset);
    		final ChartPanel chartPanel = new ChartPanel(chart){
     
                    @Override
                    public Dimension getPreferredSize() {
                        return new Dimension(501, 190);
                    }
                };
    		chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
    		add(chartPanel);
     
     
    		final XYPlot plot = chart.getXYPlot();
            plot.setBackgroundPaint(Color.lightGray);
     
            plot.setDomainGridlinePaint(Color.white);
            plot.setRangeGridlinePaint(Color.white);
     
            final XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
            renderer.setSeriesLinesVisible(1, false);
            renderer.setSeriesShapesVisible(1, false);
            plot.setRenderer(renderer);
     
    	}
     
    	public XYDataset createDataset(double cpm1, int temps1, double cpm2,
    			double temps2, double cpm3, double temps3, double cpm4,
    			double temps4) {
    		final XYSeries series1 = new XYSeries("log cpm net");
    		series1.add(temps1, cpm1);
    		series1.add(temps2, cpm2);
    		series1.add(temps3, cpm3);
    		series1.add(temps4, cpm4);
    		final XYSeriesCollection dataset = new XYSeriesCollection();
    		dataset.addSeries(series1);
    		return dataset;
     
    	}
     
    	private JFreeChart createChart(final XYDataset dataset) {
    		final JFreeChart chart = ChartFactory.createXYLineChart("log Chart", // chart
    																				// title
    				"temps", // x axis label
    				"log CPM", // y axis label
    				dataset, // data
    				PlotOrientation.VERTICAL, true, // include legend
    				true, // tooltips
    				false // urls
    				);
    		return chart;
     
            }
     
    	}
    /**
            public static void main(final String[] args) {
                    Graphique v = new Graphique(Math.log(819), 90, Math.log(687),
              110,
                Math.log(580), 130,
                   Math.log(482), 150);
                    JFrame F = new JFrame ();
                    F.add(v);
                    F.setVisible(true);
                    // window parameters
                    F.setSize(800, 900);
            
                    java.lang.Number tabx[] = { 90,110, 130, 150 };
                    java.lang.Number taby[] = { Math.log10(819), Math.log10(687),
                                    Math.log10(580), Math.log10(482) };
                    double[] x = Statistics.getLinearFit(tabx, taby);
                    for (int i = 0; i < 2; i++) {
                             System.out.println(x[i]);
                            float p1 = (float) (x[0]);
                            float p2 = (float) (x[1]);}
                    }
            
    */
    j'ai créé, ensuite, dans une classe de type JFrame, un
    JPanel "PanelGraph " que j'instancie par la classe Graphique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       JPanel cp = new Graphique(Math.log(CMP1corBis), tempsCumule1,
    Math.log(CMP2corBis),
                    tempsCumule2,
                    Math.log(CMP3corBis), tempsCumule3,
                    Math.log(CMP4corBis), tempsCumule4);
     
            PanelGraph.add(cp);
    Mais cela ne fonctionne pas. Pourtant, la classe Graphique marche
    puisque déjà testée dans le main figurant en commentaire en bas de
    classe Graphique et même affiché ce graphique dans une autre fenêtre
    à partir d'un bouton:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
         JFrame pf = new JFrame ();
        JPanel pn = new Graphique(Math.log(CMP1corBis), tempsCumule1, Math.log(CMP2corBis),
                    tempsCumule2,
                    Math.log(CMP3corBis), tempsCumule3,
                    Math.log(CMP4corBis), tempsCumule4);
        pf.add(pn);
       pf.setVisible(true);
     
        }



    Ceci marche comme on peut le voir dans cette capture d'écran :
    Nom : Log.png
Affichages : 649
Taille : 96,8 Ko


    Je souhaite simplement insérer ce graphique créé à partir de la classe "Graphique" dans le panel
    "PanelGraph" de la classe "TabFrame".


    Je ne vois pas d'issue à ce problème
    malgré mes nombreuses heures de réflexion.

    En vous remerciant par avance de votre temps et votre aide.

  2. #2
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Bonjour,


    Comme tu changes le layout du JPanel PanelGraph, je pense que tu dois faire un Panelgraph.revalidate() après ton add.

    Et une remarque en passant, penses à nommer tes variables en commençant par une minuscule, c'est plus clair à la lecture surtout que c'est l'écriture
    recommandée depuis toujours en Java et que tout le monde utilise en général

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 18
    Points : 15
    Points
    15
    Par défaut
    Merci mais cela ne marche pas...

    J'essaierai de me conformer pour les variables.

  4. #4
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Hum pour aller plus loin dans l'investigation il nous faudrait plus de détails sur ton code.

    Tu pourrais montrer la partie ou tu initialises ton PanelGraph ?
    Et dans la foulée montre nous aussi la partie ou tu ajoutes le PanelGraph et que tu fais le revalidate.

    En relisant ton code je me suis aperçu d'une chose, dans l'exemple qui fonctionne, tu ajoutes le panel de JFreeChart directement à ta JFrame. Ce n'est pas censé fonctionner comme cela, tu dois ajouter le panel au contentPane de la JFrame, par exemple en faisant pf.getContentPane().add(PanelGraph).

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

Discussions similaires

  1. Insérer graphe dans un JPanel
    Par Raikyn dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 30/03/2015, 16h51
  2. Graphe dans un JPanel
    Par JTABLE dans le forum Débuter
    Réponses: 4
    Dernier message: 17/01/2014, 17h36
  3. Insérer graphes dans une table de sortie
    Par joyeux_lapin13 dans le forum R
    Réponses: 2
    Dernier message: 24/05/2011, 11h00
  4. Réponses: 0
    Dernier message: 07/08/2009, 19h36
  5. Insérer ChartPanel dans un Jpanel ou canvas ou Jlabel
    Par harris_macken dans le forum Agents de placement/Fenêtres
    Réponses: 8
    Dernier message: 29/04/2008, 15h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo