Bonjour, dans AWT Graphique souvent on rajoute Graphics g. Or dasn le main comment met-on cette argument?
Merci
Version imprimable
Bonjour, dans AWT Graphique souvent on rajoute Graphics g. Or dasn le main comment met-on cette argument?
Merci
Salut,
Explique-nous ce que tu veux faire au juste. C'est quoi le main ? La méthode de démarrage d'un programme ? Il n'y a aucune raison d'avoir à changer les arguments de la méthode main(String[] args) (surtout que ça ne fonctionnerait plus si on le faisait), et encore moins avec un argument de type Graphics. A quoi doit te servir cet argument de type Graphics ?
Oui, tu as raison. Il y a 2 fichiers classes: l'itérateur et la classe d'action ;)
La classe de l'itérateur
L'autre classe ;)Code:
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 import java.util.Deque; import java.util.LinkedList; public class IterateurSymbole { private final Deque <Code39.Epaisseur> pile; public IterateurSymbole (Code39.Epaisseur E, Code39.Nature N){ pile=new LinkedList<>(); descendre(E); } private void descendre(Code39.Epaisseur E){ Code39.Epaisseur Ecourant = E; while(Code39.Epaisseur.getE() != null){ pile.push(Ecourant); } } public boolean hasNext(){ return !pile.isEmpty(); } public Code39.Epaisseur next(){ Code39.Epaisseur next=pile.pop(); descendre(E); return next.getE(); } }
Sinon transact, je vais suivre ton conseil et faire une classe énum, merci.;)Code:
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92 import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; public class Code39 { public static void main(String[] args){ System.out.println("It's run!"); CodeBarre("0110", g); } enum Epaisseur {LARGE, ETROIT}; Epaisseur epaisseur; enum Nature {BARRE, ESPACE}; Nature nature; public Code39(){this(Epaisseur.ETROIT,Nature.ESPACE);} public Code39(Epaisseur E, Nature N){ this.setE(E); this.setN(N); } public void setE(Epaisseur epaisseur){ this.epaisseur=epaisseur; } public void setN(Nature nature){ this.nature=nature; } public Epaisseur getE(){return this.epaisseur;} public Nature getN(){return this.nature;} //Dessiner le code barre : 0 une barre étroite; 1 un espace large public void CodeBarre(String CB, Graphics g){ int i=0; int n=CB.length(); Epaisseur E=Epaisseur.ETROIT; Nature N=Nature.ESPACE; for(i=0; i<n; i++){ if (CB.charAt(i)==0){ E=Epaisseur.ETROIT; N=Nature.BARRE; } else{ E=Epaisseur.LARGE; N=Nature.ESPACE; } } draw(E,N,g); } public void draw(Epaisseur E, Nature N, Graphics g){ int espace=0; if (E==Epaisseur.ETROIT && N==Nature.BARRE){ //Dessiner une barre étroite g.drawLine(10+espace,10+espace,100,100); } else if(E==Epaisseur.LARGE && N==Nature.BARRE){ //Dessiner une barre large g.drawLine(25+espace,25+espace,100,100); } else if(E==Epaisseur.ETROIT && N==Nature.ESPACE){ //Un espace petit espace=espace+10; } else if(E==Epaisseur.LARGE && N==Nature.BARRE){ //Dessiner un grand espace espace=espace+24; } } public String toString(){ StringBuilder builder=new StringBuilder(); toString(builder, this); return builder.toString(); } private static void toString(StringBuilder builder, Code39 v){ builder.append('('); builder.append(v); builder.append(' '); builder.append(' '); builder.append(')'); } }
Si je comprends bien, tu veux pouvoir dessiner quelque chose à partir d'une classe à toi, qui a une méthode du type draw(Graphics g).
Déjà, tu ne peux pas créer une instance Graphics (ce n'est pas une classe, mais une abstraction). Cela n'a même aucun sens (si on oublie l'impossibilité technique) : une instance de Graphics représente un contexte graphique, pas l'entité résultante (un dessin, une impression, un composant affiché à l'écran, etc.). Il est tout à fait possible d'implémenter sa propre version de classe concrète, mais c'est un travail immense, et probablement inutile, à moins de vouloir faire son propre système visuel, qui n'existerait pas déjà.
Il te faut donc en entrée un élément visuel qui va te fournir une instance de Graphics, qui va te permettre de dessiner dans l'élément visuel.
Par exemple, si on veut dessiner dans une image :
Si le but est de dessiner dans un composant Swing (ou AWT), on ne peut pas procéder comme çà : le dessin est fait dans l'Event Dispatch Thread, mais surtout, le contexte graphique étant recyclé, il faut intervenir au moment ou Swing (ou AWT) dessine le composant en question, donc dans l'une des méthodes de dessin de composant (les méthode du type paint(), paintComponent(), etc.), donc par redéfinition (on peut procéder autrement, mais c'est très complexe, car il faut connaître très précisément le processus, sinon on aura n'importe quoi à l'affichage (des bouts de dessins là où ne veut pas principalement).Code:
1
2
3
4
5
6
7
8
9
10
11
12 BufferedImage image = new BufferedImage(500,500,BufferedImage.TYPE_INT_ARGB); // on créé une image Graphics2D g = image.createGraphics(); // on demande le contexte graphique de l'image try { // maintenant on peut dessiner dans l'image g.drawLine(10,10,10,10); uneInstance.draw(g); // on peut appeler une méthode d'une classe qu'on a fait soi-même qui va faire le dessin } finally { g.dispose(); // on libère le contexte graphique }