IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Lien avec switch et problème .getInstance()


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2013
    Messages : 8
    Points : 9
    Points
    9
    Par défaut Lien avec switch et problème .getInstance()
    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

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Bonjour,

    Le mieux est de ne pas utiliser le même écouteur pour tout les boutons. Dans le code de la discutions d'origine, tu remarquera que la classe Menu implements ActionListener.
    Et que celui-ci écoute tout les boutons de manière individuelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            m121.addActionListener(this);
            m122.addActionListener(this);
            m123.addActionListener(this);
            m12.addActionListener(this);
    Ceci est une erreur de conception basique.

    Il est préférable d'avoir une classe anonyme ou une instance spécifique pour cela :

    Version classe anonyme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     m12.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent evt){
            // A remplacer par l'action a réaliser sur le bouton
            Processor.getInstance().undo();
        }});
    Version classe indépendante (le plus propre):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // Le nom est à changer pour correspondre à l'action réalisé.
    public class MonActionListener implements ActionListener{
        // Il est possible de modifier le constructeur pour avoir des paramètres nécessaire à l’exécution.
        public void actionPerformed(ActionEvent evt){
            // A remplacer par l'action a réaliser sur le bouton
            Processor.getInstance().undo();
        }
    }
    Utilisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     m12.addActionListener(new MonActionListener ());
    Pour le problème sur getInstance(), quelle est l'erreur exacte que te donne ton IDE ? Et quel est la déclaration que tu as réalisé dans ta classe Processeur. C'est une classe qui ne vient pas du JDK, il faut bien la déclarer !

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2013
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par kolodz Voir le message

    Pour le problème sur getInstance(), quelle est l'erreur exacte que te donne ton IDE ? Et quel est la déclaration que tu as réalisé dans ta classe Processeur. C'est une classe qui ne vient pas du JDK, il faut bien la déclarer !
    Pour la partie de l'écouteur je comprend bien le principe, merci. En effet j'ai déclaré dans ma classe menu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     m543 = new JMenuItem("Supprimer");
            m543.addActionListener(this);
            m6.add(m543);
    Par la suite j'ai par la suite tenté de l'utiliser pour que lorsque je clique, sur supprimer il enregistre la touche VK_0 comme une action sur la case sélectionné au lieu de faire un undo... et ainsi effacer la donnée et la remettre a valeur zéro dans ma matrice.
    (?? Ça fait du sens dit comme ça ??)


    Pour mon IDE il me proposait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import javax.annotation.processing.Processor;
    que j'ai utilisé, mais tu me dis que je dois créer une classe Processeur...
    Je vais continuer a lire...
    J'ai encore de pain sur la planche pour tout comprendre...

    Merci d'être présent sur ses forums c'est apprécié énormément.



    moi qui voulais faire ça simple...

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2013
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par dsptch Voir le message

    moi qui voulais faire ça simple...
    Ok, j'ai refais mes lecture, et surtout j'ai été voir ton Dicto sur le undo\redo et voilà!!! j'ai trouvé tout les outils et ça marche parfaitement. C'Est mon IDE avec sa classe d'annotation Processor qui me tournait a l'envers.

    Merci! encore une fois

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de lien avec wsock32.dll sous g++ (mingw32)
    Par TheShadow dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 11/04/2006, 14h43
  2. [Tableaux] Problème avec Switch case
    Par philippef dans le forum Langage
    Réponses: 4
    Dernier message: 07/09/2005, 16h37
  3. Problèmes de liens avec ODBC vars DB Oracle
    Par kmingaso dans le forum ASP
    Réponses: 1
    Dernier message: 05/09/2005, 09h51
  4. problème de liens avec API sous VC++
    Par xavynfive dans le forum MFC
    Réponses: 7
    Dernier message: 26/08/2005, 12h01
  5. Problème à l'édition des liens avec BCC55 et Xerces
    Par ShootDX dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 30/11/2003, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo