Bonjour,
Je suis en train de faire un petit logiciel qui ouvre des fichiers CSV et qui doit dessiner des courbes en fonction des données issus du CSV.
Les fichiers CSV contiennent des nombres séparés par des virgules comme ceci :
192,256,312,
118,257,333,
178,255,324,
Ces nombres correspondent à la position de pixel noir sur des lignes horizontales, la position max étant 2048.
La position verticale correspond au numéro de ligne ceci pour avoir un fichier CSV le plus léger possible.
Je lis mon fichier avec le code ci dessous, la méthodeme permettant d'envoyer un tableau de int à la classe me permettant de dessiner.
Code : Sélectionner tout - Visualiser dans une fenêtre à part updateAddALine(intLines);
Mon problême vient du fait que l'affichage de mes courbes se fait au fur et à mesure, je cherche à afficher mes courbes comme si on ouvrait une image sous paint.
Que dois je revoir ? La lecture de mes fichiers CSV ou la façon dont je dessine mes courbes ?
Classe permettant de lire le fichier CSV
Classe permettant de dessiner
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 InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferReader = new BufferedReader(inputStreamReader ); String ligne; // on boucle tant que l'on peut lire des lignes ou loopControl soit a false while(((ligne = bufferReader.readLine()) != null) && (loopControl == true)){ // une ligne contient plusieurs valeurs separe par le separateur ''regex'', on recupere ces valeurs avec la methode regex String[] lines = ligne.split(","); // On cree un tableau de int pour recuperer les Integer[] intLines = new Integer[lines.length] ; int index = 0 ; for(String value : lines){ try{ intLines[index] = Integer.valueOf(value); index++ ; }catch(NumberFormatException e){ System.out.println("erreur"); break; } } updateAddALine(intLines); // je mets à jour l'objet graphique } bufferReader.close();
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 public void addLine(Integer[] inIntTab){ if(listOfTab.equals(null)) listOfTab = new ArrayList<Integer[]>(); listOfTab.add(inIntTab) ; revalidate(); this.repaint(); } public void paintComponent(Graphics g){ // largeur int widthJPanel = this.getWidth() - widthLift ; // hauteur int heightJPanel = listOfTab.size(); g.setColor(new Color(1.0f, 1.0f, 1.0f)); // blanc g.fillRect(0, 0, widthJPanel, heightJPanel); if(listOfTab.size()== 0) return ; // on doit inverser la descente du schema pour avoir l'effet "sismographe" ArrayList<Integer[]> reverseList2 = new ArrayList< Integer[]>(); // on remplie la liste inverse for(int i = listOfTab.size()-1; i >= 0; i--) reverseList2.add(listOfTab.get(i)); // on utilise pas d'iterator car il faut avoir la place du tableau de int, sa place correspond a sa position en y for(int j = 0; j < reverseList2.size(); j++){ if(reverseList2.get(j) != null){ Integer[] tabInt = reverseList2.get(j); for(int i = 0; i < tabInt.length; i++){ if(tabInt[i] != null){ int posX = tabInt[i] * widthJPanel / 2048/*/ tabInt.length*/ ; int pixelWeight = widthJPanel / 2048 /*/ tabInt.length*/ ; g.setColor(new Color(0.0f, 0.0f, 0.0f)); // noir g.drawLine(posX, j, posX + pixelWeight, j); g.setColor(new Color(0.0f, 0.0f, 0.0f)); // rouge } } } } }
Partager