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 :
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 :
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 :
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.
Partager