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 :

[swing]Probleme avec clique droit de la souris


Sujet :

AWT/Swing Java

  1. #1
    Membre habitué Avatar de issou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 181
    Points : 136
    Points
    136
    Par défaut [swing]Probleme avec clique droit de la souris
    Bonsoir, j'ai un ptit probleme avec mon clique droit. Comment savoir dans la méthode MouseClicked sur quel bouton j'ai cliqué droit ??

    le GetBouton me renvoi un entier ...et avec le GetComponent que j'ai casté en Jbutton mais fonctionne pas apparemment .Il ne me renvoie pas le bouton cliqué .
    En fait pour etre plus precis : j'ai une grille avec 81 cases .

    Chaque case est composé d'un panel (avec CardLayout) 2 composant dans ce card layout -> 1 panel avec 9 boutons et 1 bouton simple .

    Je voudrais que quand je clique gauche qu'il me modifie un texte et quand je clique droit qu'il switch de composant du panel ...( de tel facon que si c'était un panel de 9 bouton au départ que ca soit celui avec 1 bouton..)

    Pour ce faire j'ai besoin de savoir sur quel bouton je clique droit pour pouvoir remonter au parent( le panel) et ainsi switcher de composant )

    J'ai pas l'impression d'avoir été clair en tous cas mreci du coup de main

    @ ++

  2. #2
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Je suis pas tout à fait sur, mais je crois que le clic droit c'est ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(e.getButton() == MouseEvent.BUTTON_3)

  3. #3
    Membre habitué Avatar de issou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 181
    Points : 136
    Points
    136
    Par défaut
    Oui c'est bien cela merci mais ma question n'est pas ca ... Le bouton sur lequel on clique droit ... c'est celui là que je voudrais savoir ...

    Merci

  4. #4
    Membre habitué Avatar de issou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 181
    Points : 136
    Points
    136
    Par défaut
    Help please

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 128
    Points : 151
    Points
    151
    Par défaut
    Tu devrais mettre un MouseListener sur chacun de tes boutons, et ensuite détecter le clic droit (cf le code de wichtounet).

  6. #6
    Membre habitué Avatar de issou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 181
    Points : 136
    Points
    136
    Par défaut
    Oui merci cela est fait mais je voudrais savoir sur quel bouton je clique droit...

    avec GetSource ca ne renvoie pas le bouton apparemment

  7. #7
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Si ! getSource() te renvoit une référence au composant qui a reçu l'événement. Si ce composant est un bouton, on peut dire que cette méthode "retourne" le bouton.

  8. #8
    Membre habitué Avatar de issou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 181
    Points : 136
    Points
    136
    Par défaut
    Ok , Dans ce cas je ne comprend pas pourquoi ce foutu code ne fonctionne pas :


    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
    	public void MouseClicked (MouseEvent ev){
     
     
    					      if((ev.getModifiers() & InputEvent.BUTTON1_MASK)!=0){ // si bouton droit
     
    					    	System.out.println("bouton1");
    					    	 JButton obj=(JButton) ev.getSource();
    					    	//si case  vide -> ajout possibilite
    					    	if (obj.getText().equals("")) {
     
    					    		obj.setText(Modele.value);
    					    	}
     
    					    	// si case remplie -> on vide la case
    					    	else{ 
    					    		JButton obj1= (JButton) ev.getSource();
    					    		obj1.setText("");
     
    					    	}
     
    					      }
    					    	//si bouton gauche -> placement
    					    	else if ((ev.getModifiers()& InputEvent.BUTTON3_MASK)!=0){
    					    		System.out.println("bouton3");
    					    		JButton obj= (JButton) ev.getSource();
    					    		JPanel carte= (JPanel) obj.getParent().getParent();
    					    		pile.next(carte);
     
     
     
     
    					      }
    Un grand merci pour votre patience

  9. #9
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Je vois pas trop...
    Quelques conseils :
    Verifie bien que chacun de tes boutons ont un listener ( addMouseListener ).
    Rajoute quelques "println" dans ton code pour vérifier le contenu des différentes variables.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 128
    Points : 151
    Points
    151
    Par défaut
    Deux qeustions:
    - qu'est-ce qui ne marche pas (précisément)
    - ton MouseListener est placé sur quel composant?

  11. #11
    Membre habitué Avatar de issou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 181
    Points : 136
    Points
    136
    Par défaut
    Voilà le code un peu plus complet , on voit bien que chaque bouton a un mouseListener . Rien ne fonctionne, une journée entiere pour ce probleme de merde !!! je pari que c'est une connerie en plus !!

    Je voudrais que lorsqu'on clique droit sur un bouton , je met à jour le texte de ce bouton

    et si clique gauche alors je change de composant de la pile ... (cfr cardlayout )

    Pitié aidez moi à trouver ce qui foire ... je suis en train de péter un cable ... Tout me semble logique pourtant ...

    Un grand merci en tous cas

    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
    for (int j=0;j<9;j++) { // case
     
    			    JPanel carte= new JPanel(pile);
    				JButton bouton_finale= new JButton();
    				JPanel possibilite= new JPanel( new GridLayout(3,3));
     
    				for (int k=0;k<9;k++)
     
    				{
    					JButton bposs= new JButton();
    					bposs.MouseListener(new MouseAdapter() {
     
    						public void MouseClicked(MouseEvent ev){
     
     
    					      if((ev.getModifiers() & InputEvent.BUTTON1_MASK)!=0){ // si bouton droit
     
    					    	System.out.println("bouton1");
    					    	 JButton obj=(JButton) ev.getSource();
    					    	//si case  vide -> ajout possibilite
    					    	if (obj.getText().equals("")) {
     
    					    		obj.setText(Modele.value);
    					    	}
     
    					    	// si case remplie -> on vide la case
    					    	else{ 
    					    		JButton obj1= (JButton) ev.getSource();
    					    		obj1.setText("");
     
    					    	}
     
    					      }
    					    	//si bouton gauche -> placement
    					    	else if ((ev.getModifiers()& InputEvent.BUTTON3_MASK)!=0){
    					    		System.out.println("bouton3");
    					    		JButton obj= (JButton) ev.getSource();
    					    		JPanel carte= (JPanel) obj.getParent().getParent();
    					    		pile.next(carte);
     
     
     
     
    					      }
     
     
    					}});
     
    				possibilite.add(bposs);
    				}
     
    				bouton_finale.addMouseListener(new MouseAdapter() {
     
    					public void MouseClicked(MouseEvent arg0) {
     
    						if ((arg0.getModifiers()& InputEvent.BUTTON1_DOWN_MASK)!=0){
    						JButton obj= (JButton) arg0.getSource();
    						obj.setText(Modele.value);
    						}
     
     
    						else {
     
    							JButton obj= (JButton) arg0.getSource();
    							JPanel carte= (JPanel) obj.getParent().getParent();
    							pile.next(carte);
     
    						}
     
     
    					}
     
     
    				});

  12. #12
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 852
    Points : 22 869
    Points
    22 869
    Billets dans le blog
    51
    Par défaut
    M'enfin tu aurais pu ajouter le meme listener a tes 81 bouttons et faire la difference sur le bouton clique via event.getSource() ca economiserai un peu plus la memoire. Tu peux aussi affecter une action command, leur index par exemple, via setActionCommand(String value) a chacun des boutons pour les distinguer les un des autres.

    Autre chose si au lieu de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    JPanel carte= new JPanel(pile); 
    JPanel possibilite= new JPanel( new GridLayout(3,3));
    Tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    final JPanel carte= new JPanel(pile); 
    final JPanel possibilite= new JPanel( new GridLayout(3,3));
    Tu pourras alors directement appeler et faire des actions sur les variables carte et possibilite depuis le code de ton listener.

    Sinon pour la detection du click droit il y a SwingUtilities.isRightMouseButton(event)* et/ou event.isPopupTrigger()** ?

    * devrait egalement renvoyer true si le bouton gauche est utilise et que les boutons de la souris sont inverses dans les parametres souris de Windows (je crois a verifier).

    ** utile egalement pour les Mac et autres ordis n'ayant qu'un bouton sur leur souris et ou les popup s'affiche via POMME ou CTRL + click.

  13. #13
    Membre habitué Avatar de issou
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 181
    Points : 136
    Points
    136
    Par défaut
    Merci pour ces conseils ..

    Bonne nuit

  14. #14
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Citation Envoyé par issou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JButton bposs= new JButton();
    bposs.MouseListener(new MouseAdapter() {...});
    Ca compile ça ?? Essaye plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bposs.addMouseListener(new MouseAdapter() {...});

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 463
    Points : 114
    Points
    114
    Par défaut
    Salut !

    Je suis dans la même galère que Issou (normal, on a le même cours ); je n'ai pas bien compris le sens de ton intervention, Bouye ...
    Peux-tu un peu expliciter ?

    Grand merci !

  16. #16
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 852
    Points : 22 869
    Points
    22 869
    Billets dans le blog
    51
    Par défaut
    Il ne sert pas a grand chose de definir 1 listener different specifique par bouton surtout lorsque les traitements sont absoluments 100% identiques.

    Qq chose de similaire a ca (a tester bien sur) :

    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
     
    final JPanel carte= new JPanel(pile); 
    final JPanel possibilite= new JPanel( new GridLayout(3,3)); 
     
    JButton bouton_finale= new JButton(); 
    bouton_finale.setActionCommand("finale"); // Mettre cette valeur dans une constante.  
     
    MouseListener buttonListener = new MouseAdapter() { 
     
      /** @inheritDoc
      */                   
      @Override public void mousePressed(MouseEvent ev) {  
        JButton obj = (JButton)ev.getSource();
        ////////////////////
        // bouton_finale. //
        ////////////////////
        if (obj.getActionCommand().equals("finale")) { // On aurait pu aussi declarer bouton_finale en "final" et faire un test == sur les references.
          System.out.println("Bouton_finale presse."); 
          if (SwingUtilities.isRightMouseButton(ev) || ev.isPopupTrigger()) { // si boutton droit enfonce. 
          // if (!SwingUtilities.isLeftMouseButton(ev)) {
            obj.setText(Modele.value); 
          } 
          else { 
            pile.next(carte); 
          }
       }
     
      /** @inheritDoc
      */                   
      @Override public void mouseClicked(MouseEvent ev) {                       
        JButton obj = (JButton)ev.getSource();
     
        ///////////////////
        // Autre bouton. //
        ///////////////////
        if (!obj.getActionCommand().equals("finale")) { // On aurait pu aussi declarer bouton_finale en "final" et faire un test != sur les references.
          System.out.println("Bouton " + obj.getActionCommand() + "clique."); 
          if (SwingUtilities.isRightMouseButton(ev) || ev.isPopupTrigger()) { // si bouton droit. 
            //si case  vide -> ajout possibilite 
            if (obj.getText().equals("")) {                         
              obj.setText(Modele.value); 
            }               
            // si case remplie -> on vide la case 
            else{ 
              obj.setText("");                           
            } 
          } 
          //si bouton gauche -> placement 
          else if (SwingUtilities.isLeftMouseButton(ev)) { 
            pile.next(carte);
          }                                         
        }
      }
    }); 
     
    bouton_finale.addMouseListener(buttonListener);
    for (int k=0;k<9;k++) { 
      JButton bposs= new JButton(); 
      bposs.setActionCommand(String.valueOf(k));
      bposs.addMouseListener(buttonListener);
      possibilite.add(bposs); 
    }

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 463
    Points : 114
    Points
    114
    Par défaut
    Merci !

    Je teste et je dis quoi !

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 463
    Points : 114
    Points
    114
    Par défaut
    C'est bon, ca roule impec

    Merci encore !

Discussions similaires

  1. problème avec Click droit de la souris
    Par patou41000 dans le forum C++/CLI
    Réponses: 2
    Dernier message: 22/05/2007, 10h32
  2. [Swing] Probleme avec un JDateChooser
    Par Sylmandel dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 05/04/2006, 10h04
  3. Probleme avec la roulette de la souris dans VBE
    Par GESCOM2000 dans le forum Access
    Réponses: 3
    Dernier message: 04/02/2006, 16h53
  4. Ajout de menu perso sur clique droit de la souris !!
    Par Kyp dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/12/2005, 17h06
  5. [debutant][swing] Probleme avec un Jpanel
    Par JeanMoul dans le forum Débuter
    Réponses: 6
    Dernier message: 27/08/2005, 19h07

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