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

AWT/Swing Java Discussion :

Un soucis pour capturer le clic sur un bouton.


Sujet :

AWT/Swing Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Un soucis pour capturer le clic sur un bouton.
    Bonjour tout le monde,

    Avant tout, ceci est mon premier message sur ce forum que je parcours depuis quelques années maintenant, c'est une vrai mine d'or et un puit sans fond de connaissances, donc merci d'exister .

    je suis en train d'ajouter quelques fonctionnalités à un micrologiciel que j'ai eu l'occasion d'utiliser l'année dernière en cours, c'est un assembleur très basique pour faire découvrir le code bas niveau aux étudiants de mon BTS : http://sylvain.cherrier.free.fr/LT.html

    j'essaye d'implanter un bouton de sauvegarde et un de chargement vers ou à partir d'un fichier texte, mais je bute sur un problème pour lier le clic à mes fonctions. un code vaut
    mille mots donc voici l'extrait:

    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
     
     
    [...]
     
    public class Memoire extends JFrame implements ActionListener{
    	private JTable laMemoire;
    	TableMemoire model;
     
    	public Memoire() {
    		setTitle("la Mémoire");
    		setSize(150,400);
    		setLocation(580,20);
     
    		model=new TableMemoire();
    		laMemoire= new JTable(model);				
    		laMemoire.getColumnModel().getColumn(0).setPreferredWidth(12);
    		Container c=getContentPane();
    		c.add(new JScrollPane(laMemoire),"Center");
    		// ajout d'un boutton pour sauvergarder la memoire dans un fichier texte dans le repertoire courant ou charger depuis ce meme fichier texte.
    		JPanel boutons=new JPanel();
    			boutons.setLayout(new BorderLayout());
    			JButton sauvegarder = new JButton("enregistrer");
    			sauvegarder.addActionListener(this);
    			boutons.add(sauvegarder,BorderLayout.NORTH);
    			JButton charger = new JButton("charger");
    			charger.addActionListener(this);
    			boutons.add(charger);
    			setVisible(true);
    		c.add(boutons,BorderLayout.WEST);
    		show();
    	}
     
    	public void actionPerformed(ActionEvent e) {
    		Object source = e.getSource();
     
    		if(source == sauvegarder){
    			createSave();
    			System.out.println("enregistrer");
    		}
    		if(source == charger){
    			loadSave();
    			System.out.println("charger");
    		}
    	}
     
    [...]
    je n'arrive pas à intercepter le clic des deux boutons, sauvegarder et charger. Je dois mal m'y prendre dans la réécriture de la méthode actionPerformed mais je sèche pour l'instant... un petit coup de main serait le bienvenu, à votre bon cœur !

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Lorsqu'on regarde la méthode actionPerformed, on voit que tu associes chaque action à chaque bouton par comparaison avec une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void actionPerformed(ActionEvent e) {
    		Object source = e.getSource();
     
    		if(source == sauvegarder){
    			createSave();
    			System.out.println("enregistrer");
    		}
       /* ... */
    Par exemple, ici, sauvegarder : cette variable n'est déclarée nulle part, ni localement à la méthode, ni comme membre de la classe.

    Dans le constructeur de la classe Memoire, tu déclares bien une variable sauvegarder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /* ... */
    JButton sauvegarder = new JButton("enregistrer");
    sauvegarder.addActionListener(this);
    /* ... */
    Elle est locale au constructeur, donc inacessible depuis la méthode actionPerformed. Déclare-là par exemple comme membre de la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Memoire extends JFrame implements ActionListener{
    	private JTable laMemoire;
    	TableMemoire model;
            private final JButton sauvergarder;
     
    	public Memoire() {
     
                /* ... */
    	    sauvegarder = new JButton("enregistrer");
                sauvegarder.addActionListener(this);
                /* ... */
            }
    Autre solution, utiliser les commandes :
    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
    public class Memoire extends JFrame implements ActionListener{
            private static final String COMMAND_SAVE="save";
    	private JTable laMemoire;
    	TableMemoire model;
     
    	public Memoire() {
     
                /* ... */
    	    JButton sauvegarder = new JButton("enregistrer");
                sauvegarder.setActionCommand(COMMAND_SAVE);
                sauvegarder.addActionListener(this);
                /* ... */
           }
     
    	public void actionPerformed(ActionEvent e) {
                    switch( e.getActionCommand() ) {
                          case COMMAND_SAVE:
    			createSave();
    			System.out.println("enregistrer");
                            break;
                          /* ... */
                    }
    	}
    }
    Autre solution, utiliser un ActionListener par bouton, ce qui évite d'ajouter une méthode public à ta classe :
    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
    public class Memoire extends JFrame {
    	private JTable laMemoire;
    	TableMemoire model;
     
    	public Memoire() {
     
                /* ... */
    	    JButton sauvegarder = new JButton("enregistrer");
                sauvegarder.addActionListener(new ActionListener() {
                        	public void actionPerformed(ActionEvent e) {
    			createSave();
    			System.out.println("enregistrer");
                    }
                 });
                /* ... */
           }
     
    }
    et qu'on peut aussi écrire plus simplement avec une expression lambda en Java 8:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Memoire extends JFrame {
    	private JTable laMemoire;
    	TableMemoire model;
     
    	public Memoire() {
     
                /* ... */
    	    JButton sauvegarder = new JButton("enregistrer");
                sauvegarder.addActionListener(e-> createSave() );
                /* ... */
           }
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2014
    Messages : 262
    Points : 634
    Points
    634
    Par défaut
    Heuh ya plus rien à dire !
    Joël, c'est une réponse complète j'aurais clické deux sur j'aime mais hélas.
    Merçi de la réponse !
    Aujourd'hui apprenant, demain appreneur.
    N'accuse pas le puits d'être trop profond,
    c'est peut-être ta corde qui est trop courte

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut merci pour cette réponse
    vraiment excellent cette réponse si rapide en plus... moins d'une heure, merci joel.drigo !

    que demande le peuple je vous le demande !!!

    c'était bien un problème de portée de variables en effet, la déclarer en membre de la classe a résolu le problème, c'est l'erreur du débutant quoi ^_^, je passe pour un guignol ou ça va ? merci pour tout, je pense que l'on peut passer le topic en résolu !

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 04/12/2010, 06h42
  2. compter le nombre de clics sur un boutton
    Par dotnetnuke dans le forum ASP.NET
    Réponses: 2
    Dernier message: 09/07/2009, 17h08
  3. Réponses: 1
    Dernier message: 14/01/2009, 13h53
  4. Réponses: 10
    Dernier message: 04/06/2008, 14h30
  5. Réponses: 9
    Dernier message: 02/04/2008, 20h44

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