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 :

JTree et Listener


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Par défaut JTree et Listener
    Bonjour à tous,

    me revoilà une nouvelle fois cette semaine pour une question portant sur Swing. Après vous avoir embêté avec les Layout, j'ai aujourd'hui une petite interrogation sur JTree. En effet, le focus du JTree ne change qu'au click gauche (MouseEvent.BUTTON1) alors que je voudrais que celui-ci bouge également lors d'un click droit (MouseEvent.BUTTON3). Je voudrais donc savoir quel Listener faut-il surcharger ou quel propriété du JTree me permettrait de faire cette manipulation.

    Je rajoute une autre question : Quel Listener et quelle fonction utiliser pour récupérer la valeur sélectionnée? (avec les listes j'ai compris le truc mais pas encore avec les JTree)

    NB:je désire faire celà pour afficher une JPopUpMenu, qui me permettrait d'avoir un petit menu genre copier/couper/coller.


    Merci d'avance pour vos futures enrichissantes réponses !!!

  2. #2
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    bonjour,
    si c'est pour afficher un JPopUpMenu, regarde le tutorial de Sun ici

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Par défaut
    merci Hervé mais sans vouloir t'offenser ma question n'est pas comment créer un JPopUpMenu mais plutôt comment réussir à changer le focus sur le JTree, car en faisant le click droit, il faut que je récupère le noeud sur lequel je viens de clicker (j'arrive même pas à le faire avec le click gauche)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 167
    Par défaut
    Tiens, une petite note perso que j'ai écrit sur les événements JTree...
    Avec ca, tu devrais trouver ton bonheur

    Evenements Jtree
    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
     
    1.Gestion du clique droit 
    jtree.addMouseListener(
            new MouseAdapter() {
            public void mouseReleased(MouseEvent e) {
            //Gestion du clic droit...evenement pas répéré de la même manière sous windows ou linux, d'où 2 cas
            //La première fonctionne sous windows, mais pas sous linux
            if (e.isPopupTrigger()) {
               //Action a faire
            }
            //La seconde fonctionne a priori sous les deux systèmes
             else if(SwingUtilities.isRightMouseButton(e)) {
               //Action a faire
            }
          }
        }
    );
     
    2.Gestion d'un événements de type ActionListener
    public void actionPerformed(ActionEvent ae) {
         //Permet de connaître le dernier élémnets sélectionné du Jtree 
          DefaultMutableTreeNode node = (DefaultMutableTreeNode) jtree.getLastSelectedPathComponent();
         //Test si le noeud n'est pas vide, et n'est pas la racine
          if ( (node != null) && (!node.isRoot())  {
            //Récupération de l'objet contenu dans le Jtree 
            MonType mt = (MonType)node.getUserObject();
           }
    }
     
    3.Ecoute d'un Jtree (change d'item sélectionné)
    Implémenter TreeSelectionListener
    Puis surcharger la méthode:
    public void valueChanged(TreeSelectionEvent e) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) jtree.getLastSelectedPathComponent();
        if ( (node != null) && (!node.isRoot())) {
          node.getUserObject();
        }
      }
     
    4.Sélection d'un noeud
    jtree.addMouseListener(new MouseAdapter() {
        public void mouseReleased(MouseEvent e) {
    	//Récupère le dernier noeud sélectionné
    	DefaultMutableTreeNode node = (DefaultMutableTreeNode) jtree.getLastSelectedPathComponent();
    	if ((node != null) && (!node.isRoot())) {
    		//action a réaliser
    	}
        }
    });
     
    5.Gestion du survole
    jtree.addMouseMotionListener(new MouseMotionAdapter() {
         public void mouseMoved(MouseEvent e) {
    	//Récupère le chemin du noeud survolé en fonction des coordonnées de la souris
                  TreePath selPath = jtree.getPathForLocation(e.getX(), e.getY());
    	if (selPath != null) {
    	   //A partir du chemin, on récupère le noeud 
    	   DefaultMutableTreeNode node = (DefaultMutableTreeNode) selPath.getLastPathComponent();
    	   if ((node != null) && (!node.isRoot())) {
    		//action a faire
    	   }
                  }
          }
    });

  5. #5
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    En regardant le tuto, ça donne des idées...
    Pour activer le popup, il y a un MouseListener sur le composant. donc tu peux te dire que tu vas mettre un MouseListener sur le JTree. En plus tu n'as même pas à te préoccuper de savoir comment reconnaître le bouton droit, le tuto donne tout (méthode MouseEvent.isPopupTrigger()).
    Pour ce qui est de savoir quel noeud est sélectionné, cette fois c'est dans l'API de JTree (à toi de caster vers le bon type) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Par défaut
    Je te remercie, je vais voir ce que je peux faire avec ça, et tu verras bien si c'est résolu dans l'après-midi ou pas.

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Par défaut
    Pour ce qui est de savoir quel noeud est sélectionné, cette fois c'est dans l'API de JTree (à toi de caster vers le bon type) :
    oki j'arrive bien à récupérer la valeur, mais uniquement quand je sélectionne l'élément avec le bouton de gauche, je voudrais en fait le sélectionner aussi avec le bouton de droite.

  8. #8
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    jtree.addMouseListener(new MouseAdapter() { 
      public void mouseReleased(MouseEvent e) {
        if (SwingUtilities.isRightMouseButton(e)) {
          TreePath selPath = jtree.getPathForLocation(e.getX(), e.getY());
          if (selPath != null) {
            jtree.setSelectionPath(selPath);
          }
        }
      }
    });

  9. #9
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Par défaut
    la solution que j'ai utilisé : ce code se trouve à l'intérieur du MousteClicked

    (je voudrais bien savoir à quoi servent les adaptaters svp)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if (evt.getButton() == MouseEvent.BUTTON3) {
    			TreePath selPath = jt.getPathForLocation(evt.getX(), evt.getY()); 
    		   if (selPath != null) { 
    		      //A partir du chemin, on récupère le noeud 
    		      DefaultMutableTreeNode node = (DefaultMutableTreeNode) selPath.getLastPathComponent(); 
    		      if ((node != null) && (!node.isRoot())) { 
    		            	jt.setSelectionPath(selPath);
    		      		System.out.println("je clique sur le bouton droit "+node.toString());
    		      } 
    		   }

  10. #10
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2005
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2005
    Messages : 363
    Par défaut
    merci Hervé et tomcat

  11. #11
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Plutôt que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    evt.getButton() == MouseEvent.BUTTON3
    utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SwingUtilities.isRightMouseButton(e)
    c'est plus portable.

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

Discussions similaires

  1. [JTree] Problème d'action listener
    Par beuhnoix dans le forum Composants
    Réponses: 3
    Dernier message: 26/05/2009, 18h56
  2. problème dans le listener d'un jTree
    Par amelA dans le forum Composants
    Réponses: 6
    Dernier message: 30/05/2007, 04h45
  3. [JTree] oter un listener sur un jTree
    Par Invité dans le forum Composants
    Réponses: 5
    Dernier message: 08/07/2005, 15h17
  4. [JTree] Ouvrir/Fermer l'ensemble des noeuds
    Par Math_Caen dans le forum Composants
    Réponses: 3
    Dernier message: 07/04/2003, 14h01
  5. DoubleClick Listener & ENTER
    Par Pro_Fete dans le forum Composants
    Réponses: 4
    Dernier message: 27/01/2003, 13h23

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