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 :

Conflit entre deux actionPerformed ?


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 18
    Par défaut Conflit entre deux actionPerformed ?
    Bonjour,

    J'ai deux classes qui héritent de JFrame et qui écoutent les actions faites par la souris. Grâce à ActionPerformed je peux voir que l'information arrive à une classe et pas dans l'autre. Il n'y a pas de différences majeures entre le code de ces deux classes.

    Pouvez vous m'aider s'il vous plaît?


    La classe qui reçoit l'information avec ActionPerformed
    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
     
    import javax.swing.JFrame;
    import javax.swing.Box;
    import javax.swing.JScrollPane;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
     
    //Fenetre Principal 
    public class Frame1 extends JFrame implements ActionListener{
     
    	public int numPict;//numéro image
    	public Player p;//information joueur
    	public Picture1 img;//affichage de l'image
    	public Information inf;//affichage des informatioons
    	public MysteryWord mw; //affichage du mot
     
     
      public Frame1(){
     
    	this.numPict = 0;
    	this.img = new Picture1(0);
        this.setTitle("Pendu");
        this.setSize(900, 600);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     
     
        Panel1 keybP = new Panel1();
        Button1[] b = new Button1[26];//Boutons du clavier
        for(int i =0; i< 26; i++) {
        	char c = (char)(65 + i);
        	b[i] = new Button1(c);
        	b[i].addActionListener(this);
        	keybP.add(b[i]);
        }
     
        Information inf = new Information("Patrick", 20, 100);
        JScrollPane jsp = new JScrollPane(inf);
        MysteryWord mw = new MysteryWord("***************");
        JScrollPane jsp2 = new JScrollPane(mw);
     
     
        Box b0 = Box.createVerticalBox();//Nom, Nombre d'essai, Points
        b0.add(jsp);
     
     
     
        Box b1 = Box.createHorizontalBox();
        b1.add(b0);
     
     
        Box b4 = Box.createVerticalBox();//MOT A DEVINER
        b4.add(b1);
        b4.add(jsp2);
     
     
        Box b2 = Box.createHorizontalBox();//Image
        b2.add(b4);
        b2.add(this.img);
     
     
        Box b3 = Box.createVerticalBox();//Clavier
        b3.add(b2);
        b3.add(keybP);
     
     
     
        this.getContentPane().add(b3);
        this.setVisible(true);
      }
     
     
     
      public void setPicture(int n) {
    	  this.numPict = n;
     
      }
     
      public void actionPerformed(ActionEvent arg0) {      
    	  System.out.println("Jentends");
    	  this.img.setPicture1(3);
    	  System.out.println(this.numPict);
    	  this.img.repaint();
     
      } 
     
    }
    La classe bouton qui marche avec cette 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    import javax.swing.JButton;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
     
    public class Button1 extends JButton implements MouseListener{
     
    	public char c;
     
    	public Button1(char c) {
    		String s = ""+c;
    		this.setText(s);
    		this.c = c;
    		this.addMouseListener(this);
    	}
     
    	public char getValue() {
    		return this.c;
    	}
     
    	public void mouseClicked(MouseEvent event) { 
    		System.out.print(c);
    		this.setEnabled(false);
     
    	}
     
    	public void mouseEntered(MouseEvent event) {
     
    	}
     
    	public void mouseExited(MouseEvent event) {
     
    	}
     
    	public void mousePressed(MouseEvent event) { }
    	  public void mouseReleased(MouseEvent event) { }       
     
    	}


    La classe qui ne reçoit pas l'info du clique chez elle
    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
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.Box;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
     
     
    //Fenetre Principal 
    public class FirstFrame extends JFrame implements ActionListener{
     
    	public JLabelP go;
    	public JLabelP about;
     
     
      public FirstFrame(){
    	  this.setTitle("Pendu");
    	  this.setSize(900, 600);
    	  this.setLocationRelativeTo(null);
    	  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	  this.go = new JLabelP("Jouer");
    	  this.about = new JLabelP("A propos");
     
     
    	  Picture1 img = new Picture1(8);
     
    	  JPanel a = new JPanel();
    	  JPanel b = new JPanel();
     
     
    	  a.add(this.go);
    	  b.add(this.about);
     
    	  Box b1 = Box.createVerticalBox();
    	  b1.add(a);
    	  b1.add(b);
     
    	  Box b2 = Box.createHorizontalBox();
    	  b2.add(b1);
    	  b2.add(img);
     
    	  this.add(b2);
    	  this.setVisible(true);
     
     
     
      }
     
     
      public void actionPerformed(ActionEvent evt) {
    	  System.out.println("yo");
    }
    }
    Et le JLabel qui lui est associé:
    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
     
    //Panneau dans le menu principal qui écoute les cliques
    import javax.swing.JLabel;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.Font;
     
     
    public class JLabelP extends JLabel implements MouseListener{
     
    	public JLabelP(String s) {
    		this.setText(s);
    		this.setFont(new Font("Serif", Font.PLAIN, 30));
    		this.addMouseListener(this);
    	}
     
     
     
     
    	public void mouseClicked(MouseEvent event) { 
    		System.out.print("*");
     
    	}
     
    	public void mouseEntered(MouseEvent event) {
     
    	}
     
    	public void mouseExited(MouseEvent event) {
     
    	}
     
    	public void mousePressed(MouseEvent event) { }
     
      public void mouseReleased(MouseEvent event) { }       
    	}
    J'ai aussi essayé d'interchanger les boutons ça ne marchait pas non plus.

  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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Salut,


    Citation Envoyé par Zozzio Voir le message
    La classe qui ne reçoit pas l'info du clique chez elle
    Si tu veux dire par là que la méthode actionPerformed de la classe FirstFrame n'est pas invoquée, c'est tout à fait normal : cet écouteur n'écoute aucun événement parce qu'il n'a pas été enregistré sur un émetteur d'événement de type ActionEvent.


    Citation Envoyé par Zozzio Voir le message
    Il n'y a pas de différences majeures entre le code de ces deux classes.
    Il y a au moins une différence majeure : l'une contient des boutons sur lesquels on a enregistré des écouteurs d'événements de type ActionListener, et pas l'autre, qui n'a d'ailleurs pas de composants qui émet des ActionEvent (un JLabel n'émet pas d'évenement ActionEvent, en tout cas, ni un JPanel ni un Box).

    Par ailleurs, pourquoi utiliser un MouseListener sur Button1, au lieu de faire le setEnabled(false) dans l'ActionListener (déclenché par ce bouton justement) ? Surtout que si on clique avec le bouton de droite de la souris, ça ne déclenche pas l'ActionListener mais le MouseListener si : du coup le bouton est désactivé et c'est mort pour déclencher une Action avec.
    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 averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 18
    Par défaut
    Merci pour la réponse. J'ai mis un setEnable sur Button1 pour que l'utilisateur ne puisse pas recliquer dessus. Comment fait on finalement pour récupérer un event lorsquon clique sur un JLabel ou JPanel? Tu peux m'aiguiller ? Merci.

  4. #4
    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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Zozzio Voir le message
    Comment fait on finalement pour récupérer un event lorsquon clique sur un JLabel ou JPanel?
    Avec un MouseListener (un MouseAdapter par exemple pour t'éviter d'avoir à implémenter toutes les méthodes), mais en l'enregistrant comme écouteur du composant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    JLabel label = new JLabel("Truc");
    label.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
    	System.out.println("label cliqué");
        }
    });
    Et pour être sûr que c'est par le bouton d'droite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    JLabel label = new JLabel("Truc");
    label.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
            if ( e.getButton()==MouseEvent.BUTTON1 ) {
    	     System.out.println("label cliqué avec le bouton de droite");
            }
        }
    });
    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.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 18
    Par défaut
    Merci Joel!

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

Discussions similaires

  1. [MooTools] Conflit entre deux scripts utilisant du Mootools
    Par kurkaine dans le forum Bibliothèques & Frameworks
    Réponses: 6
    Dernier message: 24/02/2011, 19h59
  2. Conflit entre deux js dans une page HTML (inclure plusieurs js)
    Par karinemariejeanne dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 28/06/2007, 16h31
  3. [MySQL] conflit entre deux fonction while
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 04/12/2006, 12h56
  4. [MySQL] Conflit entre deux fonction WHILE
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/11/2006, 18h15
  5. Réponses: 3
    Dernier message: 07/07/2006, 18h00

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