Bonjour,
J'ai un projet particulier à faire avec jflex où je dois écrire un programme qui doit lire un fichier, analyser le contenu et dessiner une figure. Mon problème n'est pas vraiment cette partie. En fait je n'arrive pas à utiliser Graphics correctement. Je dois dessiner des lignes successivement afin de former une figure un carré par exemple.
Voici donc mes deux classes qui me permettent 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
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 import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Line2D; import java.util.ArrayList; import javax.swing.JPanel; class Panneau extends JPanel { ArrayList<Line2D.Double> myList; private int x; private int y; private int lenX; private int lenY; private int angle; private boolean pinceau; public Panneau(){ this.myList = new ArrayList<Line2D.Double>(); this.x = 100; this.y = 100; this.lenX = 0; this.lenY = 0; this.pinceau = false; } public void avance(int n){ if(angle%360==0){ lenX = n; } else if(angle%360==90 || angle%360==-270){ lenY = n; } else if(angle%360==-90 || angle%360==270){ lenY = -n; } else if(angle%360==180 || angle%360==-180){ lenX = -n; } else System.out.println("L'angle n'est pas un multiple de 90"); } public void tourne(int n){ angle+=n; } public void calculPos(){ this.x += lenX; this.y += lenY; this.lenX = 0; this.lenY = 0; } public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D)g; if(this.pinceau){ System.out.println(x + " " + y + " " + lenX + " " + lenY); Line2D.Double myLine = new Line2D.Double(x, y, x+lenX, y+lenY); myList.add(myLine); } if(!myList.isEmpty()){ for (Line2D.Double myList1 : myList) { g2.draw(myList1); } } calculPos(); } public void setPinceau(boolean p){ pinceau = p; } }Ce sont les classes qui m'intéressent le plus, mon problème avec Graphics c'est qu'il réinitialise à chaque fois mes variables, donc ma liste de Line2D se retrouve vide et mes coordonné remis aux valeurs misent dans le constructeur. Je n'arrive pas à trouver un moyen de modifier mes variables et garder ce changement en mémoire.
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 import java.io.*; import javax.swing.JFrame; public class Main { public static void main(String[] args) throws Exception { if (args.length < 1) { System.out.println("java Main <namefile>"); System.exit(1); } File input = new File(args[0]); Reader reader = new FileReader(input); Lexer lexer = new Lexer(reader); LookAhead1 look = new LookAhead1(lexer); ValueEnvironement env = new ValueEnvironement(); Parser parser = new Parser(look); try { Programme p = parser.nontermS(); System.out.println("The expression is correct"); //p.run(env); Panneau pa = new Panneau(); JFrame f = new JFrame(); f.setSize(400,400); f.setResizable(false); f.add(pa); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); pa.setPinceau(true); pa.avance(10); pa.tourne(-90); pa.avance(10); /*Panneau.tourne(-90); Panneau.avance(10); Panneau.tourne(-90); Panneau.avance(10);*/ } catch (Exception e){ System.out.println("The expression is not correct."); System.out.println(e); } } }
Partager