Citation Envoyé par kolodz Voir le message
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 :

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);
En lieu et place de :
Avec la définition de la commande suivante :
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;
	}
 
}
Sachant qu'un undo est déclenchable par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Processor.getInstance().undo();
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.

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.


Bonjour Patrick,
Faire une lien avec le switch dans interface et lui dire d'écouter la commande "ecouteur.chiffre(0);" dans l'affichage... A votre avis serait-il une solution viable pour éviter tout ça ?

J'essaie de créer dans la classe menu un bouton m543... qui aurait comme fonction de produire le fameux "Vk_0" qui viens effacer la case dans l'interface... mais au final, ça semble pas marcher...

J'essaie de garder ça simple car quand je tente d'appliquer tout ça ...
J'ai tenté d'appliquer votre solution, mais j'ai un problème avec .getInstance()... il ne semble pas le trouver dans le "pack" Prossessor.

J'espère simplement pas me mélanger dans un problème de débutant encore... souvent je ne vois pas le détails...

Merci de votre aide