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 :

Renommer le noeud d'un JTree via clique droit


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Renommer le noeud d'un JTree via clique droit
    Bonjour a tous,

    Voila cela fait plusieurs jours que j'essaye de faire pour que lorsque je fasse clique droit sur un nœud puis que je clique sur le menu "Renommer" de mon JPopupMenu je puisse renommer ce noeud.

    Mais je n'y arrive pas

    J'ai réussis a renommer un noeud via ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    		//On crée notre modèle
    		this.model = new DefaultTreeModel(racine);
    		//Et nous allons écouter ce que notre modèle a à nous dire !
    		this.model.addTreeModelListener(new TreeModelListener()
                    {
                        /**
                        * Méthode appelée lorsqu'un noeud a changé (c'est a dire que l'on change le nom, on le renomme)
                        */
                        public void treeNodesChanged(TreeModelEvent evt) {
                            ModificationFichier(evt);   // Appele une fonction qui s'occupe de gérer la modification des noeuds
                        }
     
    ....
    mais c'est via un double clic gauche espacé d'1/2 seconde

    J'ai réussis à la faire via ceci aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DefaultTreeCellEditor editor = new DefaultTreeCellEditor(arbre,new DefaultTreeCellRenderer(), new DefaultCellEditor(jtxf));
    arbre.setCellEditor(editor);
    avec jtxf un JTextField, mais comme précédemment c'est avec un double clique mais ici rapide que je peux éditer mon nœud

    J'ai fais écouter mon JTree par mouseListener :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            arbre.addMouseListener(this);
    Et voici mon code de MoussePressed :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        public void mousePressed(MouseEvent e) {
            if(SwingUtilities.isRightMouseButton(e))    // Clique droit
            {
               arbre.setSelectionPath(arbre.getClosestPathForLocation(e.getX(), e.getY())); // Permet de savoir sur quel noeud on a clique
               popMenu.show(e.getComponent(), e.getX(), e.getY());  // Permet d'afficher le JPopMenu
            }
    Ceci marche trés bien, ce que je n'arrive pas c'est à appeler par exemple la fonction treeNodesChanged lors d'un clique droit, à définir que c'est à partir du moment ou je clique sur renommer que le noeud devienne éditable.

    Je vous remercie,
    Merci d'avance,
    Simon.

  2. #2
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Salut,
    jette un coup d'oeil à startEditingAtPath() de JTree, un truc à l'arrache qui fonctionne (nécessite setEditable(true)) :

    [edit]J'avais omis l'appel de treeNodeChanged() :

    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
    140
    141
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
     
    import javax.swing.JFrame;
    import javax.swing.JMenuItem;
    import javax.swing.JPopupMenu;
    import javax.swing.JScrollPane;
    import javax.swing.JTree;
    import javax.swing.SwingUtilities;
    import javax.swing.event.TreeModelEvent;
    import javax.swing.event.TreeModelListener;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.DefaultTreeModel;
     
    public class TestJTreeRenameNodes {
     
    	public static JTree tree;
     
    	public static TestJTreeRenameNodes t;
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
    		t =  new TestJTreeRenameNodes();
     
    		JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
     
    		DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
    		tree = new JTree(root);
    		root.add(new DefaultMutableTreeNode("string 1"));
    		root.add(new DefaultMutableTreeNode("string 2"));
    		tree.addMouseListener(t.new PopUpMouseListener());
    		tree.setRootVisible(false);
    		tree.setEditable(true);
     
     
    		DefaultTreeModel model = new DefaultTreeModel(root);
    		//Et nous allons écouter ce que notre modèle a à nous dire !
    		model.addTreeModelListener(new TreeModelListener()
                    {
                        /**
                        * Méthode appelée lorsqu'un noeud a changé (c'est a dire que l'on change le nom, on le renomme)
                        */
                        public void treeNodesChanged(TreeModelEvent evt) {
                            System.out.println(".treeNodesChanged()");
                        }
     
    					@Override
    					public void treeNodesInserted(TreeModelEvent e) {
    						// TODO Auto-generated method stub
     
    					}
     
    					@Override
    					public void treeNodesRemoved(TreeModelEvent e) {
    						// TODO Auto-generated method stub
     
    					}
     
    					@Override
    					public void treeStructureChanged(TreeModelEvent e) {
    						// TODO Auto-generated method stub
     
    					}
                    });
    		tree.setModel(model);
     
     
    		JScrollPane scrollPane = new JScrollPane(tree);
    		frame.add(scrollPane, BorderLayout.CENTER);
    		frame.setSize(500, 400);
    		frame.setVisible(true);
     
    	}
     
    	public class RenamePopUpMenu extends JPopupMenu implements ActionListener	{
     
    		protected JMenuItem rename;
     
    		public RenamePopUpMenu()	{
    			super();
    			rename = new JMenuItem("Rename");
    			rename.addActionListener(this);
    			this.add(rename);
    		}
     
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			// TODO Auto-generated method stub
    			if(e.getSource() == this.rename)	{
    				tree.startEditingAtPath(tree.getSelectionPath());
    			}
    		}
     
    	}
     
     
    	public class PopUpMouseListener implements MouseListener	{
     
    		@Override
    		public void mouseClicked(MouseEvent e) {
    			// TODO Auto-generated method stub
     
    		}
     
    		@Override
    		public void mouseEntered(MouseEvent e) {
    			// TODO Auto-generated method stub
     
    		}
     
    		@Override
    		public void mouseExited(MouseEvent e) {
    			// TODO Auto-generated method stub
     
    		}
     
    		@Override
    		public void mousePressed(MouseEvent e) {
    			if(SwingUtilities.isRightMouseButton(e))	{
    				tree.setSelectionPath(tree.getClosestPathForLocation(e.getX(), e.getY()));
    				t.new RenamePopUpMenu().show(e.getComponent(), e.getX(), e.getY());
    	        }		
    		}
     
    		@Override
    		public void mouseReleased(MouseEvent e) {
    			// TODO Auto-generated method stub
     
    		}
     
    	}
    }
    mais c'est via un double clic gauche espacé d'1/2 seconde
    Je crois que c'est plutôt parce qu'il faut faire un triple clic (HS : Pas encore déposé par MS celui-ci )

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Excellent ! Marche niquel

    Par contre tu me dis :
    ]J'avais omis l'appel de treeNodeChanged()
    Mais si dans ton code je fais :

    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
     
                    /*DefaultTreeModel model = new DefaultTreeModel(root);    // Creation du model
     
    		//Et nous allons écouter ce que notre modèle a à nous dire !
    		model.addTreeModelListener(new TreeModelListener()
                    {
                        
                        * Méthode appelée lorsqu'un noeud a changé (c'est a dire que l'on change le nom, on le renomme)
                       
                        public void treeNodesChanged(TreeModelEvent evt) {
                            //System.out.println(".treeNodesChanged()");    inutile
                        }
     
    					@Override
    					public void treeNodesInserted(TreeModelEvent e) {
    						// TODO Auto-generated method stub
     
    					}
     
    					@Override
    					public void treeNodesRemoved(TreeModelEvent e) {
    						// TODO Auto-generated method stub
     
    					}
     
    					@Override
    					public void treeStructureChanged(TreeModelEvent e) {
    						// TODO Auto-generated method stub
     
    					}
                    });
    		tree.setModel(model);*/

    Donc quand je met tout le model entre commentaire cela marche tout aussi bien

  4. #4
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Ah bon ? quand j'ai vu ta méthode ModifierFichier(), je pensais que tu voulais modifier un fichier (et donc appeler une méthode spécifique) après renommage du node, j'ai dû mal comprendre

  5. #5
    Invité
    Invité(e)
    Par défaut
    Plop,

    Ah bon ? quand j'ai vu ta méthode ModifierFichier(), je pensais que tu voulais modifier un fichier (et donc appeler une méthode spécifique) après renommage du node, j'ai dû mal comprendre
    En fait je fait un renommage du nœud et du fichier qui y correspond sur le DD en parallèle

    Mais avec la technique que je voulais et dont tu m'as donné la solution je n'arrive pas a récupérer le nouveau nom du node du coup c'est embêtant pour renommer :p
    Le seul truc qui été bien avec treeNodesChanged c'est que avec le TreeModelEvent je pouvais récupérer le nouveau nom

    Simon;

Discussions similaires

  1. Renommer un noeud de treeview
    Par Ismaël(l) dans le forum VB.NET
    Réponses: 1
    Dernier message: 22/02/2007, 20h59
  2. Ajouter ou supprimer noeud dans un JTree
    Par jdewalqu dans le forum Composants
    Réponses: 6
    Dernier message: 11/07/2006, 10h35
  3. JPanel comme noeud d'un JTree
    Par osopardo dans le forum Composants
    Réponses: 2
    Dernier message: 08/07/2006, 23h28
  4. Nom d'un noeud d'un JTree
    Par menuge dans le forum Composants
    Réponses: 2
    Dernier message: 26/04/2006, 16h19
  5. [JTree] Double clique
    Par Gob4 dans le forum Composants
    Réponses: 2
    Dernier message: 06/09/2005, 23h10

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