Bonjour,
Je développe l'interface graphique d'un logiciel permettant d'importer et de traiter des séries de données. Lorsqu'une série de données est importée par l'utilisateur, elle est stockée dans une classe DataSignal (nom de la série, couples des valeurs stockées sous forme de liste, propriété d'affichage de la série dans le graphe sous forme de boolean...).
L'ensemble des séries de données importées sont stockées dans une liste (listeDataSeries) affichées dans un tableau.
Ce tableau contient une colonne pour le nom de la série, une checkbox permettant à l'utilisateur de choisir si il veut l'afficher ou non dans un graphe, et un bouton pour supprimer la série.
L'état de la checkbox est lié à la propriété showSerieProperty() de la classe permettant de savoir si l'utilisateur souhaite afficher ou non la série de données dans le graphe.
Je rencontre un problème lorsque je souhaite désactiver l'affichage d'une série de données.
N'ayant pas réussi à lier directement le contenu de la liste à afficher dans le graphe (dataToPlot) aux propriétés showSerieProperty() des différentes séries de données contenues dans listeDataSeries, j'ai dupliqué le contenu de la série de données dans une liste de données intitulée SeriesToDisplay().
En fonction de l'état de showSerieProperty(), cette série est vide ou contient les données à afficher.
Lors de l'importation d'une série, j'importe directement le contenu de SeriesToDisplay dans la liste dataToPlot qui est directement utilisée pour l'affichage.
Le problème intervient lorsque j'efface dans la classe DataSignal le contenu de SeriesToDisplay. J'ai en retour un message d'erreur dans la console. Le dernier couple de valeur n'est pas effacé. Cette erreur est cohérente étant donné que je cherche à supprimer une série de données utilisée dans une autre variable du programme...
La solution que j'ai utilisé n'est donc clairement pas optimale et cela me pose des problèmes pour la suite dans le développement de mon code.
Auriez vous une solution pour lier proprement les propriétés d'affichage des différentes séries de données importées par l’utilisateur aux séries de données affichées à l'écran.
Merci par avance.
Voici un extrait de la classe DataSignal :
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 public class DataSignal { private SimpleStringProperty nomSerie ; private SimpleBooleanProperty showSerie ; private LineChart.Series<Double, Double> series = new LineChart.Series<Double, Double>(); private LineChart.Series<Double, Double> seriesToDisplay = new LineChart.Series<Double, Double>(); //....... public DataSignal(String nSerie, Boolean sSerie) { this.nomSerie = new SimpleStringProperty(nSerie); this.showSerie = new SimpleBooleanProperty(sSerie); series.setName(this.getNomSerie()); seriesToDisplay.setName(this.getNomSerie()); this.showSerie.addListener(new ChangeListener<Boolean>(){ public void changed (ObservableValue<? extends Boolean>ov, Boolean t, Boolean t1){ if (t1){ seriesToDisplay.getData().addAll(series.getData()); //System.out.println(seriesToDisplay.getData().size()+" données "+getNomSerie()+" ont été ajoutées"); }else{ seriesToDisplay.getData().clear(); //System.out.println("Les données contenues dans "+getNomSerie()+" ont été supprimées"); } } }); //...... } // Routine permettant d'ajouter des valeurs à la série de données considérée => utilisée lors de l'importation des séries de données public void addElementToSerie(Double time, Double AmplSignal) { series.getData().add(new XYChart.Data<Double, Double>(time, AmplSignal)); seriesToDisplay.getData().add(new XYChart.Data<Double, Double>(time, AmplSignal)); } // Getters and Setters public String getNomSerie() { return nomSerie.get(); } public void setNomSerie(String nSerie) { nomSerie.set(nSerie); series.setName(this.getNomSerie()); seriesToDisplay.setName(this.getNomSerie()); } //....... public Boolean getShowSerie() { return showSerie.get(); } public void setShowSerie(Boolean sSerie) { showSerie.set(sSerie); } public BooleanProperty showSerieProperty() { return showSerie; } // Getters et Setters permettant l'accès aux différentes séries de données. public Series<Double, Double> getSeries() { return series; } public void setSeries(LineChart.Series<Double, Double> series) { this.series = series; } public Series<Double, Double> getSeriesToDisplay() { return seriesToDisplay; } public void setSeriesToDisplay(Series<Double, Double> seriesToDisplay) { this.seriesToDisplay = seriesToDisplay; } //......
Un partie du code associé au contrôleur principal 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 // Lorsqu'une nouvelle série de données est importée, ou lorsqu'une série est supprimée, le contenu de dataToPLot est automatiquement modifié en conséquence // Lorsqu'une série est ajoutée à listeDataSeries, son contenu est automatiquement affiché, on transfert automatiquement les séries de données dans dataToPLot listeDataSeries.addListener(new ListChangeListener() { @Override public void onChanged(ListChangeListener.Change change) { while (change.next()) { if (change.wasAdded()){ System.out.println("Une série de données a été ajoutée ! "); dataToPLot.add(listeDataSeries.get(change.getFrom()).getSeriesToDisplay()); System.out.println(listeDataSeries.get(change.getFrom()).getNomSerie()); } if (change.wasRemoved()){ System.out.println("Une série de données a été supprimée ! "); dataToPLot.remove(change.getFrom()); } } } }); // Test qui n'a pas fonctionné et qui ne permet pas de détecter les changements apportés à la propriété showSerieProperty via la checkbox /*for(DataSignal p:listeDataSeries){ p.showSerieProperty().addListener(new ChangeListener<Boolean>() { @Override public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { System.out.println("Changement observé sur la série "+p.getNomSerie()); } }); }*/
Partager