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

2D Java Discussion :

[JFreeChart] Problème intégration graphique dans application Java


Sujet :

2D Java

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 136
    Points : 64
    Points
    64
    Par défaut [JFreeChart] Problème intégration graphique dans application Java
    Problème intégration graphique JFreeChart dans appli. Java

    Bonjour,
    J'ai un problème d'intégration de graphique JFreeChart à mon application java. Je m'explique :
    J'ai recupéré le code d'un line chart, que j'ai un peu modifié. Lorsque je lance le graphique de manière independante, pas de problème, tout marche.
    Voila le code du graphique, quand je le lance independamment de mon programme.
    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
    public class LineChartDemo6 extends ApplicationFrame { 
     
     
    	private XYDataset dataset;
    	private JFreeChart chart;
    	private ChartPanel chartPanel;
     
        /**
         * Creates a new demo.
         *
         * @param title  the frame title.
         */
        public LineChartDemo6() {
     
        	super("test");
            this.dataset = createDataset();
            this.chart = createChart(dataset);
            this.chartPanel = new ChartPanel(chart);
            chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
            setContentPane(chartPanel);
        }
     
        private XYDataset createDataset() {
     
            final XYSeriesCollection dataset = new XYSeriesCollection();
             XYSeries series1 = new XYSeries("First");
            series1.add(1.0, 1.0);
            series1.add(2.0, 4.0);
     
     
            dataset.addSeries(series1);
     
            series1 = new XYSeries ("Second");
            series1.add(1.0, 2.0);
            series1.add(2.0, 1.0);
     
            dataset.addSeries(series1);
     
            series1 = new XYSeries ("third");
            series1.add(1.0, 1.0);
            series1.add(2.0, 1.0);
     
            dataset.addSeries(series1);
     
     
            return dataset;
     
        }
     
        /**
         * Creates a chart.
         * 
         * @param dataset  the data for the chart.
         * 
         * @return a chart.
         */
        private JFreeChart createChart(final XYDataset dataset) {
     
            // create the chart...
            final JFreeChart chart = ChartFactory.createXYLineChart(
                "Line Chart Demo 6",      // chart title
                "X",                      // x axis label
                "Y",                      // y axis label
                dataset,                  // data
                PlotOrientation.VERTICAL,
                true,                     // include legend
                true,                     // tooltips
                false                     // urls
            );
     
     
            final XYPlot plot = chart.getXYPlot();
            plot.setDomainGridlinePaint(Color.white);
            plot.setRangeGridlinePaint(Color.white);
     
            final XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
            renderer.setSeriesLinesVisible(0, false);
            renderer.setSeriesShapesVisible(1, false);
            plot.setRenderer(renderer);
     
            // change the auto tick unit selection to integer units only...
            final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
            rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
            // OPTIONAL CUSTOMISATION COMPLETED.
     
            return chart;
     
        }
     
     
        public void setTitle(String title) {
        	chart.setTitle(title);
        }
     
     
        public static void main(final String[] args) {
     
            final LineChartDemo6 demo = new LineChartDemo6();
            demo.pack();
            RefineryUtilities.centerFrameOnScreen(demo);
            demo.setVisible(true);
     
        }
     
    }
    Pour l'intégrer à mon application, j'ai enlevé l'heritage a ApplicationFrame et tout ce qui s'en suit, et j'ai ajouté la methode suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
        public ChartPanel getChartPanel() {
        	return chartPanel;
        }
    Dans mon application, je fais quelque chose comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    jContentPane.add(chart.getChartPanel(), BorderLayout.CENTER);
    Le problème que je rencontre dans mon application c'est qu'en faisant un clique droit sur le graphique (qui s'affiche ) le menu permettant d'imprimer, d'exporter en image etc s'ouvre, mais en meme temps, un zoom s'effectue automatiquement sur le graphique. Ce problème ne survient pas quand je lance le graphique de manière indépendante. Je présume qu'un problème quelconque de Listener se cacher derriere tout ca, mais je ne vois absolument pas comment regler ca. Quelqu'un aurait une idée ?

    Merci d'avance

  2. #2
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 136
    Points : 64
    Points
    64
    Par défaut
    Je procede de la maniere suivante :
    Requete base de donnee => creation dataset => creation d'un objet JFreeChart avec la methode createChart copié ci dessus ( avec le dataset crée precedemment en parametre ) => Je crée un chartPanel avec le JFreeChart crée precedement en parametre => j'ajoute ce chartPanel a ma GUI.

    Donc le graphique s'affiche comme il faut, mais quand je fais un clic droit dessus, l'affichage bug ( le graphique affiché avant la création expliqué ci-dessus est partiellement reaffiché )
    J'ai en fait l'impression que le premier graphique que je charge marche sans probleme, mais à partir du moment ou j'ajoute de nouveau un graphique a mon ContentPane, des soucis apparaissent.

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 136
    Points : 64
    Points
    64
    Par défaut
    Sans voulour abusé du up ( non, pas encore un carton jaune !) je profite de ce sujet pour copié / collé un message que j'ai écris sur le meme probleme dans un autre sujet.

    J'ai un programme Java avec une interface en swing. L'utilisateur a le choix entre plusieurs types de graphique, et en cliquant sur un bouton, un dataset est crée suite a une lecture de BDD, et le graphique doit s'afficher.
    J'ai donc un Panel, contenant le graphique. Ce panel doit etre capable d'afficher plusieurs type de graphique. Mes problèmes apparaissent quand je "charge" le deuxieme graphique dans ce Panel. Il s'affiche comme il faut, mais en faisant un clic droit, le graphique precedent (que je voulais "écraser") apparait de nouveau.
    Un petit bout de code permettra peut-etre de rentre tout ca plus clair :

    Creation de la fenetre generale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	private JFrame getJFrame() {
    		if (jFrame == null) {
    			jFrame = new JFrame();
    			jFrame.setSize(new Dimension(728, 728));
    			jFrame.setContentPane(getJContentPane());
    		}
    		return jFrame;
    Ajout du graphique par defaut dans ce panel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	private JPanel getJContentPane() {
    			jContentPane = new JPanel();
    			jContentPane.setLayout(new BorderLayout());
    			jContentPane.add(TopPanel(), BorderLayout.NORTH);
    			jContentPane.add(new ChartPanel(getJFreeChartDefault()), BorderLayout.CENTER);
     
    		return jContentPane;
    	}


    La méthode getJFreeChartDefault crée le graphique par defaut, et retourne le JFreeChart crée.
    Ensuite, pour l'instant, quand je veux creer un nouveau graphique, je procede de la maniere suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     jContentPane.add(new ChartPanel(getJFreeChartNouveauGraph()), BorderLayout.CENTER);
    jContentPane.validate();


    getJFreeChartNouveauGraph() crée le nouveau graphique, et retourne le JFreeChart crée. J'imagine que ce n'est pas la solution la plus politiquement correct ( outre le fait qu'elle ne fonctionne que tres partiellement). Quelqu'un saurait comment je peux faire ca de facon plus intelligente ?

    Voila à quoi ressemble le problème quand je clique sur le 2e graph :



    Toutes les idées sont les bienvenues !




    [EDIT]
    En faisait un JContentPane.removeAll() avant d'ajouter mon nouveau graphique, ca fonctionne. Ce n'est sans doute pas la solution la plus propre, mais je vais me contenter de ca dans un premier temps
    [/EDIT]

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/02/2008, 15h41
  2. Dectecter proxy down dans application java
    Par lgi12 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 28/01/2008, 15h42
  3. Problème lien html via application java
    Par dumasan dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 29/06/2007, 15h47
  4. problème avec graphique dans état access
    Par petitmic dans le forum Access
    Réponses: 5
    Dernier message: 07/09/2005, 14h55
  5. [Java-Swing][HTML] Page html à inclure dans application Java
    Par terminagroo dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 04/07/2005, 10h04

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