Chers amateurs de JFreechart,
J'utilise la bibliothèque JFreeChart v.1.0.10 (que j'ai achetée il y a bien 12 ans) et la documentation 'Developer Guide' de la version 1.0.5 (23 mars 2007).
Mon application GUI comporte un graphique temporel avec XYDataset. J'affiche le premier 'tab' avec tous les boutons, tableaux, champs de texte ... et, en-dessous, un graphique sans courbe : Dans ma fonction d'initialisation :ainsi que dans mon 'GroupLayout' :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 jeuDonnéesGraphTempor = new JeuDonnéesGraphTempor(tablePrinc); chart = createChart(null); // createDataset() chartPanel = new ChartPanel(chart); chartPanel.setPreferredSize(new Dimension(500, 270));Ce n'est que lorsque les champs de texte et les tableaux ont été remplis que le jeu de donnée peut être constitué. L'utilisateur actionne alors un bouton pour générer le dataset ainsi que regénérer le graphique avec, cette fois-ci, les courbes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part .addComponent(chartPanel, GroupLayout.PREFERRED_SIZE, LARGEUR_GRAPHIQUE, GroupLayout.PREFERRED_SIZE)Problème n°I : Le graphique n'est pas regénéré, et cependant le dataset est rempli.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 if (e.getSource() == bout_GénérGraphique) { moyHebdPuiss = jeuDonnéesGraphTempor.calculMoyHebdPuiss(tablePrinc); xyDataset = createDataset(moyHebdPuiss); createChart(xyDataset); }
Problème n°II : Les données fournies pour constituer le dataset sont des 'BigDecimal' d'une table. En examinant le 'dataset' - voir 'createDataset()' - j'observe que les valeurs sont au format 'Double', mais surtout qu'elles ont toutes été arrondies à l'unité. Comment les afficher avec deux décimales, par exemple ?Merci bcp d'avance.
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 private /* static */ XYDataset createDataset(BigDecimal[][] moyHebdomPuiss) { TimeSeries série1 = new TimeSeries("Heures creuses", Month.class); TimeSeriesCollection dataset = new TimeSeriesCollection(); for (short i = 0 ; i < 12 ; i++) { // Les 12 valeurs dans la série sont tous des 'doubles' arrondis à l'unité ! série1.add(new Month(i+1, 2012), moyHebdPuiss[i][2].doubleValue()); } dataset.addSeries(série1); dataset.setDomainIsPointsInTime(true); return dataset; } /** * Creates the chart. * @param dataset the dataset. * @return The chart. */ private /* static */ JFreeChart createChart(XYDataset dataset) { // Create the chart ... chart = ChartFactory.createTimeSeriesChart ( "Mesures quart-horaires de la consommation d'électricité", // chart title "Semaines", // domain axis label - XY "Puissance - KW", // range axis label - Value dataset, // data false, // include legend true, // tooltips? false // URLs ); // Now do some optional customization of the chart ... chart.setBackgroundPaint(Color.white); XYPlot plot = (XYPlot) chart.getPlot(); plot.setBackgroundPaint(Color.lightGray); plot.setDomainGridlinePaint(Color.white); plot.setRangeGridlinePaint(Color.white); plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0)); plot.setDomainCrosshairVisible(true); plot.setRangeCrosshairVisible(true); XYItemRenderer r = plot.getRenderer(); if (r instanceof XYLineAndShapeRenderer) { XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) r; renderer.setBaseShapesVisible(true); renderer.setBaseShapesFilled(true); } DateAxis axis = (DateAxis) plot.getDomainAxis(); axis.setDateFormatOverride(new SimpleDateFormat("yyyy-MMM")); return chart; }
Partager