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 :

Problème avec ActionEvent


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2014
    Messages : 30
    Points : 19
    Points
    19
    Par défaut Problème avec ActionEvent
    En essayant de faire un simple ActionEvent j'ai rencontré ce problème "button cannot be resolved to a variable"
    le morceau du codé affecté est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if(e.getSource() == bouton2)
    le code complet est le suivant:
    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
     import java.awt.EventQueue;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
    import javax.swing.GroupLayout;
    import javax.swing.GroupLayout.Alignment;
    import javax.swing.JFileChooser;
    import javax.swing.JButton;
    import javax.swing.JTextArea;
    import javax.swing.LayoutStyle.ComponentPlacement;
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
     
     
    public class tpjava extends JFrame implements ActionListener{
     
    	private static final long serialVersionUID = 1L;
    	private JPanel contentPane;
        JButton  bouton1;
    	JTextArea textArea1=null;
    	public static void main(String[] args) {
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					tpjava frame = new tpjava();
    					frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    	}
     
     
    	/**
             * Create the frame.
             */
    	public tpjava() {
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(100, 100, 660, 478);
    		contentPane = new JPanel();
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		setContentPane(contentPane);
     
     
     
    		JFileChooser fileChooser = new JFileChooser();
     
    		JButton bouton1 = new JButton("Acheter");
    		bouton1.addActionListener(this);
     
    		JButton bouton2 = new JButton("Afficher");
    		bouton2.addActionListener(this);
     
    		JButton bouton3 = new JButton("Sauvegarder");
    		bouton3.addActionListener(this);
     
    		JButton bouton4 = new JButton("Fichier1");
    		bouton4.addActionListener(this);
     
    		JButton bouton5 = new JButton("Fichier2");
    		bouton5.addActionListener(this);
     
    		JButton bouton6 = new JButton("Fichier3");
    		bouton6.addActionListener(this);
     
    		JTextArea textArea1 = new JTextArea();
     
     
    		JTextArea textArea2 = new JTextArea();
     
     
    		GroupLayout gl_contentPane = new GroupLayout(contentPane);
    		gl_contentPane.setHorizontalGroup(
    			gl_contentPane.createParallelGroup(Alignment.LEADING)
    				.addGroup(gl_contentPane.createSequentialGroup()
    					.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
    						.addGroup(gl_contentPane.createSequentialGroup()
    							.addComponent(fileChooser, GroupLayout.PREFERRED_SIZE, 494, GroupLayout.PREFERRED_SIZE)
    							.addGap(18)
    							.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
    								.addComponent(bouton4, GroupLayout.DEFAULT_SIZE, 112, Short.MAX_VALUE)
    								.addComponent(bouton5, GroupLayout.DEFAULT_SIZE, 112, Short.MAX_VALUE)
    								.addComponent(bouton6, GroupLayout.DEFAULT_SIZE, 112, Short.MAX_VALUE)))
    						.addGroup(gl_contentPane.createSequentialGroup()
    							.addContainerGap()
    							.addComponent(textArea1, GroupLayout.PREFERRED_SIZE, 248, GroupLayout.PREFERRED_SIZE)
    							.addPreferredGap(ComponentPlacement.UNRELATED)
    							.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
    								.addComponent(bouton3, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    								.addComponent(bouton2, GroupLayout.DEFAULT_SIZE, 95, Short.MAX_VALUE)
    								.addComponent(bouton1, GroupLayout.DEFAULT_SIZE, 95, Short.MAX_VALUE))
    							.addPreferredGap(ComponentPlacement.RELATED)
    							.addComponent(textArea2, GroupLayout.DEFAULT_SIZE, 255, Short.MAX_VALUE)))
    					.addContainerGap())
    		);
    		gl_contentPane.setVerticalGroup(
    			gl_contentPane.createParallelGroup(Alignment.TRAILING)
    				.addGroup(gl_contentPane.createSequentialGroup()
    					.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
    						.addGroup(Alignment.TRAILING, gl_contentPane.createSequentialGroup()
    							.addContainerGap()
    							.addComponent(bouton1)
    							.addPreferredGap(ComponentPlacement.RELATED)
    							.addComponent(bouton2)
    							.addPreferredGap(ComponentPlacement.RELATED)
    							.addComponent(bouton3))
    						.addComponent(textArea1, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 172, Short.MAX_VALUE)
    						.addComponent(textArea2, GroupLayout.DEFAULT_SIZE, 172, Short.MAX_VALUE))
    					.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
    						.addGroup(gl_contentPane.createSequentialGroup()
    							.addGap(20)
    							.addComponent(fileChooser, GroupLayout.PREFERRED_SIZE, 238, GroupLayout.PREFERRED_SIZE))
    						.addGroup(gl_contentPane.createSequentialGroup()
    							.addGap(56)
    							.addComponent(bouton4)
    							.addPreferredGap(ComponentPlacement.UNRELATED)
    							.addComponent(bouton5)
    							.addPreferredGap(ComponentPlacement.UNRELATED)
    							.addComponent(bouton6))))
    		);
    		contentPane.setLayout(gl_contentPane);
    	}
     
    	public void actionPerformed(ActionEvent e) {
    		if(e.getSource() == bouton2) {
    		Personnevoiture frame = new Personnevoiture();
    		frame.setVisible(true);
    		}		
    	}
    }
    le problème qu'il ne trouve pas la variable bouton2

  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,

    Une variable locale à une méthode ne peut être vue dans une autre méthode. Il s'agit de la notion de scope. Toute variable a un scope qui définit où elle peut être utilisée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Exemple {
     
       public void methode1() {
            int variable = 1;
       }
     
       public void methode2() {
           System.out.println( variable ); // variable est locale à methode1, donc non visible dans methode2, donc erreur
       }
     
    }
    Une variable de classe, de type private, peut être vue de toutes les méthodes de la classe. Le modifier protected/public (ou aucun modifier, scope dit "default") à la place de private peut étendre le scope à d'autres classes.

    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 Exemple {
     
       private int variable;
     
       public void methode1() {
            variable = 1; // variable est une variable de la classe Exemple, donc visible dans methode1 et methode2
       }
     
       public void methode2() {
           System.out.println( variable ); // variable est une variable de la classe Exemple, donc visible dans methode1 et methode2
       }
     
    }
    Attention : on peut déclarer des variables de même nom dans des scopes différents. Il ne s'agit pas de la même variable.

    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 Exemple {
     
       private int variable;
     
       public void methode1() {
            int variable = 1; // variable est une locale de methode1, donc visible dans methode1, mais pas dans methode2 : elle cache en plus variable déclarée dans la classe (le private int variable)
       }
     
       public void methode2() {
           System.out.println( variable ); // variable est une variable de la classe Exemple, donc visible dans methode2
       }
     
    }
    methode2 affichera toujours 0, même si on appelle methode1, parce que celle-ci ne modifie pas variable déclarée dans Exemple (mais une variable locale à methode1, de même nom), et seule variable visible dans methode2.
    C'est d'ailleurs le cas de ta variable bouton1.

    Pour résumé, la solution est de déclarer bouton2 comme tu as déclarée bouton1 dans la classe, mais surtout de supprimer le "JButton" devant les variables bouton1 et bouton2 (et éventuellement faire la même chose avec les autres boutonX le cas échéant) dans la méthode où tu les initialises par new JButton().
    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
    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
    Tu peux procéder différemment pour éviter d'avoir à modifier le scope des variables boutonX :

    • utiliser un actionListener différent pour chaque bouton. Ceci est facilité par la notion de lambda de Java8 ;
    • Utiliser la notion de commande, ce qui simplifie le code de l'actionListener (on peut faire un switch sur la commande).
    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.

Discussions similaires

  1. Problème avec actionListener et actionEvent
    Par monaam57 dans le forum Débuter
    Réponses: 2
    Dernier message: 29/12/2013, 19h06
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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