Bonjour,
J'essaye de générer un graphique dans mon interface Swing qui prend comme donnée, l'heure, le jour, le mois et l'année ainsi que la mesure d'un patient que j'extrais de la BDD pour les mettre en arguments dans ma méthode addData():
qui permet d'ajouter les donnée au graphique par la méthode voirGraphique() de la classe ADO comme voici:
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 public class GraphiquePatient extends JPanel{ private int idmesure=1; private int day=20; private int month=5; private int year=2008; private double mesure=1.80; NumberAxis rangeAxis; ChartPanel chartPanel; JFreeChart chart; TimeSeries ligne_patient= null; RegularTimePeriod rtp; TimeSeriesCollection dataSet = new TimeSeriesCollection(); public GraphiquePatient(){ JPanel p = new JPanel(); // Couleurs des lignes Color COULEURLIGNE1 = Color.black; // On ajoute les lignes dans le dataset // Creation des lignes ligne_patient = new TimeSeries("Patient 1", Hour.class); // Ajout des ligne dans le dataset dataSet.addSeries(ligne_patient); // Creation du graphique chart = ChartFactory.createTimeSeriesChart("Evolution du Taux de glycémie du patient","Période","Taux de glycémie",dataSet,true,false,false); chartPanel = new ChartPanel(chart, true); // Les dimensions du graphique Dimension d = new Dimension(350,250); chartPanel.setMaximumSize(d); chartPanel.setPreferredSize(d); chartPanel.setMinimumSize(d); p.add(chartPanel); XYPlot plot = (XYPlot) chart.getPlot(); // On definie une couleur pour les lignes plot.getRenderer().setSeriesPaint(0,COULEURLIGNE1); // On definie une couleur de fond pour le graphique plot.setBackgroundPaint(Color.white); rangeAxis = (NumberAxis) plot.getRangeAxis(); // On fixe une taille pour l'axe des ordonnées rangeAxis.setUpperBound(5.0); add(p); addData(idmesure, day, month, year, mesure); this.setVisible(true); } // On ajoute des données public void addData(int idmesure, int day, int month, int year, double mesure){ ligne_patient.setNotify(true); ligne_patient.addOrUpdate(new Hour(idmesure,day,month,year), mesure); dataSet.addSeries(ligne_patient); // Titre du graphique ligne_patient.fireSeriesChanged(); chartPanel.setChart(chart); }
Donc normalement lorsque je renseigne le code du patient dans l'interface, cette méthode doit me générer dynamiquement l'évolution du taux de glycémie.
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 public void voirGraphique(Fenetre fen){ try { boolean drapeau = false; int nblignes= fen.getTm().getRowCount(); Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery("SELECT mesure.* FROM mesure, patient WHERE id_patient=ref"); while (rs.next()) { if (rs.getObject(8).equals(refSuivi)){ drapeau = true; int idmesure =(Integer)rs.getObject(1); System.out.println("numéro mesure: "+idmesure); date=(String) rs.getObject(4); heure=(String) rs.getObject(6); glycemie=(Double) rs.getObject(5); axtrapide=(Double) rs.getObject(2); mixtard30=(Double) rs.getObject(7); commentaire=(String) rs.getObject(3); int hour= Integer.parseInt(heure.substring(0,2)); System.out.println("heur: "+hour); int day = Integer.parseInt(date.substring(0,2)); System.out.println("dat: "+day); int month = Integer.parseInt(date.substring(3,5)); System.out.println("mois: "+month); int year = Integer.parseInt(date.substring(6,10)); System.out.println("annee: "+year); System.out.println("mesure: "+glycemie); gp.addData(idmesure, day, month, year, glycemie); } } if(drapeau==false){ Toolkit.getDefaultToolkit().beep(); JOptionPane.showMessageDialog(fen, "aucune mesure pour le patient", "Information", JOptionPane.INFORMATION_MESSAGE); } } catch (SQLException e) { e.printStackTrace(); } }
Or je me retrouve avec cette erreur ci a chaque fois:
J'ai bien mis la méthode addOrUpdate() à la place de .add() mais toujours la même erreur.Exception in thread "AWT-EventQueue-0" org.jfree.data.general.SeriesException: You are attempting to add an observation for the time period Mon May 05 02:00:00 CEST 2008 but the series already contains an observation for that time period. Duplicates are not permitted. Try using the addOrUpdate() method. at org.jfree.data.time.TimeSeries.add(TimeSeries.java:527)
at org.jfree.data.time.TimeSeries.add(TimeSeries.java:570)
at org.jfree.data.time.TimeSeries.add(TimeSeries.java:556)
at modeles.GraphiquePatient.addData(GraphiquePatient.java:101)
at ado.ADO.voirGraphique(ADO.java:253)
at modeles.Fenetre.actionPerformed(Fenetre.java:420)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
De même que, l'axe des abscisses est gradué d'une manière très bizarre.
Si quelqu'un a une idée du problème ?
Merci d'avance pour votre aide.
Partager