Tu as oublié de mettre une valeur (pour X comme pour Y) : un int a pour valeur par défaut 0. Donc tes fenêtre s'affichent, mais de taille 0x0 !
Tu as oublié de mettre une valeur (pour X comme pour Y) : un int a pour valeur par défaut 0. Donc tes fenêtre s'affichent, mais de taille 0x0 !
C'est bon ça marche, j'ai juste un dernier soucis, quand je clique sur intro ça ne m'affiche rien alors que quand je clique sur les règles elles s'affichent sans problèmes.
J'ai remarqué que le bouton du menu aide reste sélectionné en bleu durant 2 secondes, c'est comme si l'image était invisible.
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231 import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; /** * @author Administrateur * * TODO Pour changer le modèle de ce commentaire de type généré, allez à : * Fenêtre - Préférences - Java - Style de code - Modèles de code */ public class Menu extends JMenuBar implements ActionListener{ static int X; static int Y; Interface map; JMenu m1; JMenu m2; JMenu m3; JMenu m4; JMenu m5; JMenuItem m12; JMenuItem m121; JMenuItem m122; JMenuItem m123; JMenuItem m222; JMenuItem m331; JMenuItem m332; JMenuItem m441; JMenuItem m442; JMenuItem m541; JMenuItem m542; public Menu(Interface map){ super(); this.map=map; m1 = new JMenu("Nouvelle grille"); m2 = new JMenu("Solutionner Grille"); m3 = new JMenu("Générer une grille"); m4 = new JMenu("Fonctions supplémentaires"); m5 = new JMenu("Aide"); m121 = new JMenuItem("Niveau fort"); m122 = new JMenuItem("Niveau moyen"); m123 = new JMenuItem("Niveau faible"); m12 = new JMenuItem("Sélectionner dans une liste"); m121.addActionListener(this); m122.addActionListener(this); m123.addActionListener(this); m12.addActionListener(this); m222 = new JMenuItem("Vider la Grille"); m222.addActionListener(this); m1.add(m222); m331 = new JMenuItem("Afficher la solution"); m331.addActionListener(this); m2.add(m331); m332 = new JMenuItem("Cacher la solution"); m332.addActionListener(this); m2.add(m332); m332.setEnabled(false); m441 = new JMenuItem("Copier grille dans le presse-papier"); m441.addActionListener(this); m4.add(m441); m442 = new JMenuItem("Imprimer Grille+Solution"); m442.addActionListener(this); m4.add(m442); m541 = new JMenuItem("Intro"); m541.addActionListener(this); m5.add(m541); m542 = new JMenuItem("Afficher les regles"); m542.addActionListener(this); m5.add(m542); m3.add(m121); m3.add(m122); m3.add(m123); m3.addSeparator(); m3.add(m12); m5.add(m541); m5.add(m542); this.add(m1); this.add(m2); this.add(m3); this.add(m4); this.add(m5); //PERMET DE DESACTIVER CERTAINS ELEMENTS PAR DEFAUT } public void actionPerformed(ActionEvent evt){ //PERMET D'eviter une ecriture de chiffre par erreur map.ecouteur.carre=null; if(evt.getSource()==m121){ //map.cherchernouvellesgrilles(); map.supanel.selection(3); } else if(evt.getSource()==m122){ //map.testersinouvellegrille(); map.supanel.selection(2); } else if(evt.getSource()==m123){ map.supanel.selection(1); } else if(evt.getSource()==m222){ map.supanel.vidergrille(); // map.supanel.cherchernouvellesgrilles(); } else if(evt.getSource()==m331){ if(map.supanel.solutionnergrille()){ m331.setEnabled(false); m332.setEnabled(true); } } else if(evt.getSource()==m332){ map.supanel.cachersolution(); m331.setEnabled(true); m332.setEnabled(false); } else if(evt.getSource()==m541){ new window( 500, 500, 1); } else if(evt.getSource()==m542){ new window(800, 500, 2); } //ECRITURE DANS PRESSE PAPIER else if(evt.getSource()==m441){ if(map.getSudoku().getTableaufinal()!=null){ ecriturepressepapier(map.getSudoku().getTableaufinal()); } else{ ecriturepressepapier(map.getSudoku().getGrille()); } } //IMPRESSION else if(evt.getSource()==m442){ JFrame frame=new JFrame("Aperçu avant Impression"); frame.setSize(new Dimension(305,640)); Fond supanelreponse1=new Fond(map.map,map); Fond supanelreponse2=new Fond(map.map,map); supanelreponse1.impressionapartirdetableau(map.sudoku.grille); if(map.supanel.solutionnergrille()){ System.out.println("GRILLE"); map.sudoku.afficher(map.sudoku.grille); System.out.println("REPONSE"); map.sudoku.afficher(map.sudoku.tableaufinal); supanelreponse2.impressionapartirdetableau(map.sudoku.tableaufinal); //CONTENTPANEL JPanel contentPanel = (JPanel)frame.getContentPane(); contentPanel.setLayout(null); supanelreponse1.setBounds(0,0,300,300); contentPanel.add(supanelreponse1); supanelreponse2.setBounds(0,301,300,300); contentPanel.add(supanelreponse2); frame.setContentPane(contentPanel); frame.setVisible(true); MPanelPrinter mp=new MPanelPrinter(contentPanel); mp.print(); map.supanel.cachersolution(); frame.dispose(); } } map.requestFocus(); } public void ecriturepressepapier(int[][] tableau){ String temp=""; for(int i=0;i<tableau.length+2;i++){ temp+="#"; } temp+="\n"; for(int i=0;i<tableau.length;i++){ temp+="#"; for(int e=0;e<tableau[i].length;e++){ if(tableau[i][e]!=0){ temp+=Integer.toString(tableau[i][e]); } else{ temp+=" "; } } temp+="#\n"; } for(int i=0;i<tableau.length+2;i++){ temp+="#"; } map.getMpp().setClipboardContents(temp); } }
Bah, oui, c'est dû à ce code :
Celui qui a écrit ça ne sait manifestement pas que sleep() s'applique toujours au thread courant, soit ici l'EDT (on ne peut pas faire attendre un autre thread). D'ailleurs, la méthode est statique. Il faudrait remplacer ça par 'pour faire ce que ça voudrait que ça fasse, c'est-à-dire afficher l'image pendant 2 secondes puis fermer la fenêtre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 if( type == 1 ) { try { t.sleep(2000); thread = 1; } catch( java.lang.InterruptedException ex ) { JOptionPane.showMessageDialog(null, "erreur"); } dispose(); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 if ( type == 1 ) { Timer timer = new Timer(2000, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { ((Timer)e.getSource()).stop(); dispose(); } }); timer.start(); }
D'accord, j'ai vu où c'était, maintenant ça marche. Merci
On me demande : Vous devez créer une nouvelle fonctionnalité permettant d’annuler les placements dans la grille. Pour ce faire, vous devez implémenter la mécanique permettant de sauvegarder et annuler les placements et vous devez créer un menu Édition avec la fonctionnalité « Annuler Placement ».
Puisque je n'ai encore jamais fait un menu édition, je suis un peu perdu il faut que je rajoute les fonctionnalités de correction dans cette classe, puisqu'on dirait qu'elle gère l'écriture dans la matrice? Ou que je fasse une nouvelle classe seulement pour l'édition?
Je pense que je dois plutôt créer une nouvelle classe car j'ai compilé le programme et pour l'instant on ne peut pas remplir les cases de la grille. Pourtant je pensais qu'il y avait déjà une classe qui s'occupait de permettre le remplissage du tableau.
La gestion de de la fonction annuler demande un partern de conception très particulier...
Qui ne semble pas être de ton niveau ! Cela ne s'ajoute pas en random dans une application !
Il se trouve que j'ai déjà fait un billet à ce sujet ici :
[Java][Design Pattern]Comment faire le undo/redo? Le principe de base !
Mais globalement, il faudrait avoir :
En lieu et place de :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 PlayCommand command = new PlayCommand(ecouteur.map.getSudoku(),ecouteur.carre, ecouteur.map, ecouteur.carre.getI(), ecouteur.carre.getE(),1); Processor.getInstance().execute(command);
Avec la définition de la commande suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part ecouteur.chiffre(1);
Sachant qu'un undo est déclenchable par :
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 package org.k.developpez.blog.undoredo; import javax.swing.ImageIcon; public class PlayCommand implements Command { private Sudoku sudoku; private int x, y; private int played; private int before; private Carre carre; private Interface map; public PlayCommand(Sudoku sudoku,Carre carre,Interface map, int x, int y, int played) { this.sudoku = sudoku; this.x = x; this.y = y; this.played = played; this.carre = carre; this.map =map; } public void execute() { before = this.sudoku.getGrille()[x][y]; this.sudoku.setGrille(x, y, played); this.sudoku.afficher(this.sudoku.getGrille()); if(played != 0){ carre.setBg(map.getNbdispo(played - 1)); }else{ carre.setBg(new ImageIcon("images/nonselec.png").getImage()); } carre.repaint(); } public void undo() { this.sudoku.setGrille(x, y, before); this.sudoku.afficher(this.sudoku.getGrille()); if(before != 0){ carre.setBg(map.getNbdispo(before - 1)); }else{ carre.setBg(new ImageIcon("images/nonselec.png").getImage()); } carre.repaint(); } public boolean canBeUnDone() { return true; } }
Mais, il faut bien comprendre que la mise à jour de l'affichage n'est pas le travail normal de d'un commande. La commande ne devrait pas connaitre Carre carre,Interface mapNote : le code compile avec la classe Processor et l'interface Command correspondant à mon billet de blog.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Processor.getInstance().undo();
Si tu rends ça pour te faire noté, autant dire directement à ton professeur qui tu as utilisé du code externe. Il s'en rendra compte tout seul de toute façon.
Cordialement,
Patrick Kolodziejczyk.
Merci pour toutes ces infos utiles.
De toutes manière on me demande de faire quelque chose qui ne correspond pas au niveau des cours que l'on m'a donné, donc obligatoirement je suis obligé de trouver la solution ailleurs. De toutes façon ce cours est une vraie catastrophe, mon objectif est de rendre ce dernier exercice pour le terminer au plus vite.
Le ecouteur.chiffre(1); est sensé être dans la classe menu, non?
De mémoire oui,
Mais c'est ce que tu as actuellement et qu'il faut remplacer. C'est l'endroit où tu as l'écouter pour les touches.
Il faut changer les autres déclencheurs aussi...
Cordialement,
Patrick Kolodziejczyk.
D'accord, j'ai regardé, mais je n'arrive pas à le trouver.
Pourrait il être dans une autre classe?
Désolé d’embêter avec une chose aussi simple, mais vu que j'utilise des notions que je ne maîtrise pas encore, j'ai un peu peur de faire plus de dégâts qu'autre chose.
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232 import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; /** * @author Administrateur * * TODO Pour changer le modèle de ce commentaire de type généré, allez à : * Fenêtre - Préférences - Java - Style de code - Modèles de code */ public class Menu extends JMenuBar implements ActionListener{ static int X; static int Y; Interface map; JMenu m1; JMenu m2; JMenu m3; JMenu m4; JMenu m5; JMenuItem m12; JMenuItem m121; JMenuItem m122; JMenuItem m123; JMenuItem m222; JMenuItem m331; JMenuItem m332; JMenuItem m441; JMenuItem m442; JMenuItem m541; JMenuItem m542; public Menu(Interface map){ super(); this.map=map; m1 = new JMenu("Nouvelle grille"); m2 = new JMenu("Solutionner Grille"); m3 = new JMenu("Générer une grille"); m4 = new JMenu("Fonctions supplémentaires"); m5 = new JMenu("Aide"); m121 = new JMenuItem("Niveau fort"); m122 = new JMenuItem("Niveau moyen"); m123 = new JMenuItem("Niveau faible"); m12 = new JMenuItem("Sélectionner dans une liste"); m121.addActionListener(this); m122.addActionListener(this); m123.addActionListener(this); m12.addActionListener(this); m222 = new JMenuItem("Vider la Grille"); m222.addActionListener(this); m1.add(m222); m331 = new JMenuItem("Afficher la solution"); m331.addActionListener(this); m2.add(m331); m332 = new JMenuItem("Cacher la solution"); m332.addActionListener(this); m2.add(m332); m332.setEnabled(false); m441 = new JMenuItem("Copier grille dans le presse-papier"); m441.addActionListener(this); m4.add(m441); m442 = new JMenuItem("Imprimer Grille+Solution"); m442.addActionListener(this); m4.add(m442); m541 = new JMenuItem("Intro"); m541.addActionListener(this); m5.add(m541); m542 = new JMenuItem("Afficher les regles"); m542.addActionListener(this); m5.add(m542); m3.add(m121); m3.add(m122); m3.add(m123); m3.addSeparator(); m3.add(m12); m5.add(m541); m5.add(m542); this.add(m1); this.add(m2); this.add(m3); this.add(m4); this.add(m5); //PERMET DE DESACTIVER CERTAINS ELEMENTS PAR DEFAUT } public void actionPerformed(ActionEvent evt){ //PERMET D'eviter une ecriture de chiffre par erreur map.ecouteur.carre=null; if(evt.getSource()==m121){ //map.cherchernouvellesgrilles(); map.supanel.selection(3); } else if(evt.getSource()==m122){ //map.testersinouvellegrille(); map.supanel.selection(2); } else if(evt.getSource()==m123){ map.supanel.selection(1); } else if(evt.getSource()==m222){ map.supanel.vidergrille(); // map.supanel.cherchernouvellesgrilles(); } else if(evt.getSource()==m331){ if(map.supanel.solutionnergrille()){ m331.setEnabled(false); m332.setEnabled(true); } } else if(evt.getSource()==m332){ map.supanel.cachersolution(); m331.setEnabled(true); m332.setEnabled(false); } else if(evt.getSource()==m541){ new window( 500, 500, 1); } else if(evt.getSource()==m542){ new window(800, 500, 2); } //ECRITURE DANS PRESSE PAPIER else if(evt.getSource()==m441){ if(map.getSudoku().getTableaufinal()!=null){ ecriturepressepapier(map.getSudoku().getTableaufinal()); } else{ ecriturepressepapier(map.getSudoku().getGrille()); } } //IMPRESSION else if(evt.getSource()==m442){ JFrame frame=new JFrame("Aperçu avant Impression"); frame.setSize(new Dimension(305,640)); Fond supanelreponse1=new Fond(map.map,map); Fond supanelreponse2=new Fond(map.map,map); supanelreponse1.impressionapartirdetableau(map.sudoku.grille); if(map.supanel.solutionnergrille()){ System.out.println("GRILLE"); map.sudoku.afficher(map.sudoku.grille); System.out.println("REPONSE"); map.sudoku.afficher(map.sudoku.tableaufinal); supanelreponse2.impressionapartirdetableau(map.sudoku.tableaufinal); //CONTENTPANEL JPanel contentPanel = (JPanel)frame.getContentPane(); contentPanel.setLayout(null); supanelreponse1.setBounds(0,0,300,300); contentPanel.add(supanelreponse1); supanelreponse2.setBounds(0,301,300,300); contentPanel.add(supanelreponse2); frame.setContentPane(contentPanel); frame.setVisible(true); MPanelPrinter mp=new MPanelPrinter(contentPanel); mp.print(); map.supanel.cachersolution(); frame.dispose(); } } map.requestFocus(); } public void ecriturepressepapier(int[][] tableau){ String temp=""; for(int i=0;i<tableau.length+2;i++){ temp+="#"; } temp+="\n"; for(int i=0;i<tableau.length;i++){ temp+="#"; for(int e=0;e<tableau[i].length;e++){ if(tableau[i][e]!=0){ temp+=Integer.toString(tableau[i][e]); } else{ temp+=" "; } } temp+="#\n"; } for(int i=0;i<tableau.length+2;i++){ temp+="#"; } map.getMpp().setClipboardContents(temp); } }
Autre petite question est-ce normale que l'on ne puisse rien insérer dans les cases?
Non. Perso j'ai testé. Juste en remplaçant le comportement pour la touche 1. Cela fonction, j'ai aussi ajouté un cas pour pouvoir annuler... qui marche aussi.
Cordialement,
Patrick Kolodziejczyk.
J'ai effectué une recherche et la seule référence à écouteur est faite ici "map.ecouteur.carre=null;" mais je ne pense pas que ce soit ça.
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 actionPerformed(ActionEvent evt){ //PERMET D'eviter une ecriture de chiffre par erreur map.ecouteur.carre=null; if(evt.getSource()==m121){ //map.cherchernouvellesgrilles(); map.supanel.selection(3); } else if(evt.getSource()==m122){ //map.testersinouvellegrille(); map.supanel.selection(2); } else if(evt.getSource()==m123){ map.supanel.selection(1); } else if(evt.getSource()==m222){ map.supanel.vidergrille(); // map.supanel.cherchernouvellesgrilles(); } else if(evt.getSource()==m331){ if(map.supanel.solutionnergrille()){ m331.setEnabled(false); m332.setEnabled(true); } } else if(evt.getSource()==m332){ map.supanel.cachersolution(); m331.setEnabled(true); m332.setEnabled(false); } else if(evt.getSource()==m541){ new window( 500, 500, 1); } else if(evt.getSource()==m542){ new window(800, 500, 2); }
Désolé, tu as du poster quand j’étais entrain d'écrire du coup j'avais pas vu ta réponse
à mon avis je regardais pas la bonne classe, car j'arrivais pas du tout à me repérer.
Regarde ta classe Interface (le type qui a nommé cette classe devrait être pendu....) ligne 100 environ....
Cordialement,
Patrick Kolodziejczyk.
Ah oui d'accord, je cherchais pas du tout dans la bonne classe. Merci
Je suis allé voir pourquoi tu avais mit implement et non extend et de ce que j'ai compris c'est pareil sauf que implement fait référence à une interface. Cela soulève une autre question, dois-je la créer l'interface ou elle existe déjà dans le programme que l'on m'a donné. Car au début je pensait que la classe interface qu'ils ont si bien nommés était celle qu'il fallait que je mette dans mon implement.
En premier lieu ta classe Interface est problématique, car elle est nommé comme cela probablement pour faire une IHM. Ce qui n'est pas bien c'est que interface est un mot réservé du langage qui signifie autre chose.
Une interface java est un contrat que s'engage à respecter une classe.
Exemple :
Tu pourrai avoir deux implémentations totalement différent :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public interface Vendeur{ /* *Encaisse un montant et retourne la monaie */ public int encaisser(int montant); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public classe Voleur { public int encaisser(int montant){ return 0; }L'interface que doit satisfaire la commande que je propose c'est Command et celle-ci se trouve dans le zip associé au billet de blog que j'ai donnée plus haut. Il te faut aussi la classe processeur de ce même zip/projet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public classe Commercant{ public int encaisser(int montant){ if(montant >10){ return montant-10; } return 0; }
Cordialement,
Patrick Kolodziejczyk.
Oui en effet tout est dans le zip bon je vais m'occuper de tout ça. Grand merci.
Ps: J'ai eu en effet quelques confusion à cause du nom des classes, je sais pas ce qui leur est passé par la tête quand ils ont fait ce programme.
Par contre quand j'ai créé la classe Command Eclipse me souligne :
En me disant ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public class Command { public void execute(); public void undo(); public boolean canBeUnDone(); }This method requires a body instead of a semicolon
Si tu avais regardé le code qui se trouve dans le zip tu aurai vue que Command est une interface...
Une interface est un contrat et ne nécessite pas d'implémentation contrairement à une classe.(Sauf si celle-ci est abstraite)
D'où le fait qu'Eclipse te retourne une erreur de compilation.
Pour le coup, il va falloir que tu révise la base de la programmation objet. Car, c'est une base dans pratiquement tout les langages moderne qui font de l'objet.
Cordialement,
Patrick Kolodziejczyk.
Je suis parfaitement d'accord sur le fait que Command est un interface et je n'ai pas fais d’implémentation dans mon interface, j'ai une implémentation seulement dans la classe PlayCommand comme celle que tu as écrit dans la page précédente.
J'ai essayé d'enlever l’implémentation de l'interface dans ma classe et ça change rien.
Sérieusement va lire un tutoriel de base sur Java.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public interface Command { public void execute(); public void undo(); public boolean canBeUnDone(); }
Quel imbécile je fais, depuis tout à l'heure tu essais de me le faire comprendre, j'avais pas vu qu j'avais mis public class pour l'interface. Désolé de t'avoir embêté pour ça, mais je commence à être un peu fatigué.
Merci pour tout
J'ai plus de message d'erreur mais je n'arrive toujours pas à insérer quoi que ce soit dans les cases de la grille. Quand tu as essayé ça fonctionnait?
voici le code :
classe interface :
Voici la classe menu avec le menu édition qui pour l'instant ne fait rien.
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230 import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.image.BufferedImage; import javax.swing.*; public class Interface extends JFrame { // Variables declaration JPanel contentPanel; Sudoku sudoku; Fond supanel; // Ecouteur et Presse-Papier Ecouteur ecouteur; ModifPressPap mpp; FileLogger file; Menu menu; // Tableaux pour les chiffres Image[] nbplaces = new Image[9]; Image[] nbdispo = new Image[9]; // IMAGE JPANEL Image map = new ImageIcon("http://www.developpez.net/forums/images/sudoku.png").getImage(); Image digi = new ImageIcon("http://www.developpez.net/forums/images/digits.gif").getImage(); BufferedImage mapmodifiable = toBufferedImage(map); BufferedImage digits = toBufferedImage(digi); int carre = 30; public Interface() { super(); this.setVisible(false); file = new FileLogger(this, "sudoku.txt"); file.repertoire(); // LANCEMENT DE SUDOKU ET MISE EN DAEMON this.sudoku = new Sudoku(9); sudoku.setPriority(Thread.MAX_PRIORITY); sudoku.start(); initializeComponent(); creationdigits(); this.setVisible(true); } public void creationdigits() { int indice = 0; for (int i = 0; i <= digits.getHeight() - (carre - 1); i += (carre - 1)) { nbplaces[indice] = digits.getSubimage(29, i, carre - 1, carre - 1); nbdispo[indice] = digits.getSubimage(0, i, carre - 1, carre - 1); indice++; } } private void initializeComponent() { // CONTENTPANEL contentPanel = (JPanel) this.getContentPane(); contentPanel.setLayout(new GridBagLayout()); // SUDOKUPANEL supanel = new Fond(map, this); // MENU menu = new Menu(this); this.setJMenuBar(menu); // ECOUTEUR ET PRESSEPAPIER ecouteur = new Ecouteur(this); mpp = new ModifPressPap(); GridBagConstraints c = new GridBagConstraints(); c.gridx = 0; c.gridy = 1; c.gridwidth = 1; c.gridheight = 1; c.weightx = 100; c.weighty = 100; c.fill = GridBagConstraints.NONE; c.ipadx = 0; c.ipady = 0; contentPanel.add(supanel, c); this.setFocusable(true); this.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { int caract = e.getKeyCode(); switch (caract) { case KeyEvent.VK_1: PlayCommand command = new PlayCommand(ecouteur.map .getSudoku(), ecouteur.carre, ecouteur.map, ecouteur.carre.getI(), ecouteur.carre.getE(), 1); Processor.getInstance().execute(command); break; case KeyEvent.VK_2: PlayCommand command2 = new PlayCommand(ecouteur.map .getSudoku(), ecouteur.carre, ecouteur.map, ecouteur.carre.getI(), ecouteur.carre.getE(), 2); Processor.getInstance().execute(command2); break; case KeyEvent.VK_3: PlayCommand command3 = new PlayCommand(ecouteur.map .getSudoku(), ecouteur.carre, ecouteur.map, ecouteur.carre.getI(), ecouteur.carre.getE(), 3); Processor.getInstance().execute(command3); break; case KeyEvent.VK_4: PlayCommand command4 = new PlayCommand(ecouteur.map .getSudoku(), ecouteur.carre, ecouteur.map, ecouteur.carre.getI(), ecouteur.carre.getE(), 4); Processor.getInstance().execute(command4); break; case KeyEvent.VK_5: PlayCommand command5 = new PlayCommand(ecouteur.map .getSudoku(), ecouteur.carre, ecouteur.map, ecouteur.carre.getI(), ecouteur.carre.getE(), 5); Processor.getInstance().execute(command5); break; case KeyEvent.VK_6: PlayCommand command6 = new PlayCommand(ecouteur.map .getSudoku(), ecouteur.carre, ecouteur.map, ecouteur.carre.getI(), ecouteur.carre.getE(), 6); Processor.getInstance().execute(command6); break; case KeyEvent.VK_7: PlayCommand command7 = new PlayCommand(ecouteur.map .getSudoku(), ecouteur.carre, ecouteur.map, ecouteur.carre.getI(), ecouteur.carre.getE(), 7); Processor.getInstance().execute(command7); break; case KeyEvent.VK_8: PlayCommand command8 = new PlayCommand(ecouteur.map .getSudoku(), ecouteur.carre, ecouteur.map, ecouteur.carre.getI(), ecouteur.carre.getE(), 8); Processor.getInstance().execute(command8); break; case KeyEvent.VK_9: PlayCommand command9 = new PlayCommand(ecouteur.map .getSudoku(), ecouteur.carre, ecouteur.map, ecouteur.carre.getI(), ecouteur.carre.getE(), 9); Processor.getInstance().execute(command9); break; case KeyEvent.VK_DELETE: ecouteur.chiffre(0); break; } } }); this.setContentPane(contentPanel); this.setLocation(new Point(350, 350)); this.setTitle("Sudoku"); this.setResizable(false); this.setSize(new Dimension(540, 405)); } public BufferedImage toBufferedImage(Image image) { /** On test si l'image n'est pas déja une instance de BufferedImage */ if (image instanceof BufferedImage) { /** cool, rien à faire */ return ((BufferedImage) image); } else { /** On s'assure que l'image est complètement chargée */ image = new ImageIcon(image).getImage(); /** On crée la nouvelle image */ BufferedImage bufferedImage = new BufferedImage( image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB); Graphics g = bufferedImage.createGraphics(); g.drawImage(image, 0, 0, null); g.dispose(); return (bufferedImage); } } public static void main(String[] args) { window fenetreintro = new window(440, 400, 1); // INTERFACE GRAPHIQUE Interface graphique = new Interface(); graphique.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { System.exit(0); } }); } public Fond getSupanel() { return supanel; } public Image getNbdispo(int i) { return nbdispo[i]; } public Image getNbplaces(int i) { return nbplaces[i]; } public Sudoku getSudoku() { return sudoku; } public void setSudoku(Sudoku sudoku) { this.sudoku = sudoku; } public ModifPressPap getMpp() { return mpp; } /** * @return Renvoie contentPanel. */ public JPanel getContentPanel() { return contentPanel; } /** * @param contentPanel * contentPanel à définir. */ public void setContentPanel(JPanel contentPanel) { this.contentPanel = contentPanel; } }
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226 import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; /** * @author Administrateur * * TODO Pour changer le modèle de ce commentaire de type généré, allez à * : Fenêtre - Préférences - Java - Style de code - Modèles de code */ public class Menu extends JMenuBar implements ActionListener { static int X; static int Y; Interface map; JMenu m1; JMenu m2; JMenu m3; JMenu m4; JMenu m5; JMenu m6; JMenuItem m12; JMenuItem m121; JMenuItem m122; JMenuItem m123; JMenuItem m222; JMenuItem m331; JMenuItem m332; JMenuItem m441; JMenuItem m442; JMenuItem m541; JMenuItem m542; JMenuItem m543; public Menu(Interface map) { super(); this.map = map; m1 = new JMenu("Nouvelle grille"); m2 = new JMenu("Solutionner Grille"); m3 = new JMenu("Générer une grille"); m4 = new JMenu("Fonctions supplémentaires"); m5 = new JMenu("Aide"); m6 = new JMenu("Edition"); m121 = new JMenuItem("Niveau fort"); m122 = new JMenuItem("Niveau moyen"); m123 = new JMenuItem("Niveau faible"); m12 = new JMenuItem("Sélectionner dans une liste"); m121.addActionListener(this); m122.addActionListener(this); m123.addActionListener(this); m12.addActionListener(this); m222 = new JMenuItem("Vider la Grille"); m222.addActionListener(this); m1.add(m222); m331 = new JMenuItem("Afficher la solution"); m331.addActionListener(this); m2.add(m331); m332 = new JMenuItem("Cacher la solution"); m332.addActionListener(this); m2.add(m332); m332.setEnabled(false); m441 = new JMenuItem("Copier grille dans le presse-papier"); m441.addActionListener(this); m4.add(m441); m442 = new JMenuItem("Imprimer Grille+Solution"); m442.addActionListener(this); m4.add(m442); m541 = new JMenuItem("Intro"); m541.addActionListener(this); m5.add(m541); m542 = new JMenuItem("Afficher les regles"); m542.addActionListener(this); m5.add(m542); m543 = new JMenuItem("Supprimer"); m541.addActionListener(this); m5.add(m541); m3.add(m121); m3.add(m122); m3.add(m123); m3.addSeparator(); m3.add(m12); m5.add(m541); m5.add(m542); m6.add(m543); this.add(m1); this.add(m2); this.add(m3); this.add(m4); this.add(m5); this.add(m6); // PERMET DE DESACTIVER CERTAINS ELEMENTS PAR DEFAUT } public void actionPerformed(ActionEvent evt) { // PERMET D'eviter une ecriture de chiffre par erreur map.ecouteur.carre = null; if (evt.getSource() == m121) { // map.cherchernouvellesgrilles(); map.supanel.selection(3); } else if (evt.getSource() == m122) { // map.testersinouvellegrille(); map.supanel.selection(2); } else if (evt.getSource() == m123) { map.supanel.selection(1); } else if (evt.getSource() == m222) { map.supanel.vidergrille(); // map.supanel.cherchernouvellesgrilles(); } else if (evt.getSource() == m331) { if (map.supanel.solutionnergrille()) { m331.setEnabled(false); m332.setEnabled(true); } } else if (evt.getSource() == m332) { map.supanel.cachersolution(); m331.setEnabled(true); m332.setEnabled(false); } else if (evt.getSource() == m541) { new window(500, 500, 1); } else if (evt.getSource() == m542) { new window(800, 500, 2); } else if (evt.getSource() == m542) { } // ECRITURE DANS PRESSE PAPIER else if (evt.getSource() == m441) { if (map.getSudoku().getTableaufinal() != null) { ecriturepressepapier(map.getSudoku().getTableaufinal()); } else { ecriturepressepapier(map.getSudoku().getGrille()); } } // IMPRESSION else if (evt.getSource() == m442) { JFrame frame = new JFrame("Aperçu avant Impression"); frame.setSize(new Dimension(305, 640)); Fond supanelreponse1 = new Fond(map.map, map); Fond supanelreponse2 = new Fond(map.map, map); supanelreponse1.impressionapartirdetableau(map.sudoku.grille); if (map.supanel.solutionnergrille()) { System.out.println("GRILLE"); map.sudoku.afficher(map.sudoku.grille); System.out.println("REPONSE"); map.sudoku.afficher(map.sudoku.tableaufinal); supanelreponse2 .impressionapartirdetableau(map.sudoku.tableaufinal); // CONTENTPANEL JPanel contentPanel = (JPanel) frame.getContentPane(); contentPanel.setLayout(null); supanelreponse1.setBounds(0, 0, 300, 300); contentPanel.add(supanelreponse1); supanelreponse2.setBounds(0, 301, 300, 300); contentPanel.add(supanelreponse2); frame.setContentPane(contentPanel); frame.setVisible(true); MPanelPrinter mp = new MPanelPrinter(contentPanel); mp.print(); map.supanel.cachersolution(); frame.dispose(); } } map.requestFocus(); } public void ecriturepressepapier(int[][] tableau) { String temp = ""; for (int i = 0; i < tableau.length + 2; i++) { temp += "#"; } temp += "\n"; for (int i = 0; i < tableau.length; i++) { temp += "#"; for (int e = 0; e < tableau[i].length; e++) { if (tableau[i][e] != 0) { temp += Integer.toString(tableau[i][e]); } else { temp += " "; } } temp += "#\n"; } for (int i = 0; i < tableau.length + 2; i++) { temp += "#"; } map.getMpp().setClipboardContents(temp); } }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager