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

Composants Java Discussion :

Comportement double click


Sujet :

Composants Java

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2011
    Messages : 74
    Points : 85
    Points
    85
    Par défaut Comportement double click
    Bonjour à tous.
    Je suis en train de redéfinir un mouse listener sur un jtree pour définir le comportement suivant :
    - simple clic : déroulement ou enroulement du noeud cliqué
    - double clic : appel d'une fonction quelconque sans mouvement du noeud.

    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
    public class thisMouseAdapter extends MouseAdapter {
    		public void mouseClicked(MouseEvent e) {
    		    if (e.getClickCount() == 2) {
    		    	BonPrepa bonPrepa =  (BonPrepa) ((DefaultMutableTreeNode) arbre.getLastSelectedPathComponent()).getUserObject();
    		    	System.out.println("CLICK 2");
    		    }
    		    else if (e.getClickCount() == 1) {
    		    	System.out.println("CLICK 1");
    		    	int selRow = arbre.getRowForLocation(e.getX(), e.getY());
    		         if(selRow != -1) {
    		        	 TreePath pathSelected = arbre.getSelectionPath();
    		        	 if (arbre.isExpanded(pathSelected))
    		        		 arbre.collapsePath(pathSelected);
    		        	 else
    		        		 arbre.expandPath(pathSelected);
    		         }
     
    		    }
    		  }
    	}
    Ce que se passe malheureusement lorsque je double clic, c'est que mon listener passe à chaque fois par le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (e.getClickCount() == 1)
    avant de passer à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (e.getClickCount() == 2)
    comme si je faisais 3 click.
    En console ça donne : et ceci peu importe la vitesse à laquelle je clique. J'avoue que j'y perds un peu mon latin (pis bon il est 5h mes neurones commencent sûrement à être out...)

    Si quelqu'un a une idée sur le fonctionnement du double clic en général....

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2011
    Messages : 74
    Points : 85
    Points
    85
    Par défaut
    Problème résolu, j'ai ajouté un timer et quelques flags, et le problème est réglé. Le code pour ceux que ça pourrait aider :

    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
     
    int tempsEcoule = 0;
    int nbreDeClick = 0;
     
    // pense à lier le listener à l'objet à écouter. Ici, le jtree arbre.
    public class thisMouseAdapter extends MouseAdapter {
    		public void mouseClicked(MouseEvent e) {
    			if (e.getSource() == arbre) {
    		    	nbreDeClick++;
    			    if (e.getClickCount() == 1) {
    			    	if (!timer.isRunning())
    			    		timer.start();
    			    }
    			}
    		}
    	}
     
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		if (e.getSource() == timer) {
    			if (tempsEcoule < 350) 
    				tempsEcoule++;
    			else
    				timer_checked();
    		}
    	}
     
    	public void timer_checked() {
    		if (nbreDeClick == 1) {
            	//Traitement à effectuer pour 1 clic
    		}
    		else if (nbreDeClick == 2) {
    			// Traitement à effectuer pour double clic
    		}
    		timer.stop();
    		nbreDeClick = 0;
    		tempsEcoule = 0;
    	}
    Après, au niveau du forum, je suis dans la section JTree parce que mon problème s'effectuait sur un JTree, mais le modèle est exportable partout (je pense).
    Si quelqu'un a une meilleure solution, je suis preneur.

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

Discussions similaires

  1. [VB.NET] DataGrid et double click
    Par mic56 dans le forum Windows Forms
    Réponses: 15
    Dernier message: 01/11/2006, 04h37
  2. [JTree] Empecher le double-click
    Par filpinpin dans le forum Composants
    Réponses: 6
    Dernier message: 13/05/2005, 13h45
  3. Question sur double click
    Par cjacquel dans le forum MFC
    Réponses: 2
    Dernier message: 30/04/2005, 11h53
  4. [C#] [WinForms] Double click ListBox
    Par fxp17 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/04/2005, 14h58
  5. OnMouseUp et double click
    Par DBBB dans le forum Composants VCL
    Réponses: 3
    Dernier message: 14/12/2004, 16h02

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