Operation sur JTree [Résolu]

alonsyl 348 Messages postés mardi 6 avril 2004Date d'inscription 6 novembre 2008 Dernière intervention - 27 mars 2006 à 10:51 - Dernière réponse : cs_zazou1 48 Messages postés mardi 28 décembre 2004Date d'inscription 23 juillet 2010 Dernière intervention
- 28 mars 2006 à 00:27
bonjour,

dans le constructeur d'une JFrame, j'ai construis un JTree de la maniere suivante :

DefaultMutableTreeNode code6 = new DefaultMutableTreeNode("UUU") ;
DefaultMutableTreeNode code5 = new DefaultMutableTreeNode("YYY") ;
DefaultMutableTreeNode code4 = new DefaultMutableTreeNode("TTT") ;
DefaultMutableTreeNode code3 = new DefaultMutableTreeNode("RRR") ;

DefaultMutableTreeNode code2 = new DefaultMutableTreeNode("EEE") ;
DefaultMutableTreeNode code1 = new DefaultMutableTreeNode("ZZZ") ;
code2.add(code6);
code2.add(code5);
code1.add(code4);
code1.add(code3);
DefaultMutableTreeNode racine = new DefaultMutableTreeNode("AAA") ;
racine.add(code2);
racine.add(code1);
JTree monArbre = new JTree(racine) ;<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />

le truc, c'est qu'il faudrait que mon utilisateur puisse (en cliquant sur un JButton) ajouter un noeud fils au noeud dont il aura specifie la designation dans un JTextField ("TTT" par exemple).
comment puis-je retrouve par le code un reference sur le noeud dont la designation est "XXX" ?

existe t'il un truc du genre :
"DefaultMutableTreeNode monNoeud = (DefaultMutableTreeNode) noeud_de_'monArbre'_dont_la_designation_est_"XXX";" ?

sinon, comment specifier une boucle du genre "pour chaque noeud de 'monArbre' => je verifie si la designation == "XXX"" ?

merci a vous,

alonsyl
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Twinuts 5272 Messages postés dimanche 4 mai 2003Date d'inscription 3 août 2018 Dernière intervention - 27 mars 2006 à 14:44
3
Merci
Salut,



tu peux faire une recherche dans le jtree pas son chemin





exemple :



public TreePath findByName(String[] names) {

TreeNode root = (TreeNode) treeModel.getRoot();

return find(new TreePath(root), names, 0, true);

}





private TreePath find(TreePath parent, Object[] nodes, int depth,

boolean byName) {

TreeNode node = (TreeNode) parent.getLastPathComponent();

Object o = node;

// If by name, convert node to a string

if (byName)

o = o.toString();



// If equal, go down the branch

if (o.equals(nodes[depth])) {

// If at end, return match

if (depth == nodes.length - 1)

return parent;



// Traverse children

if (node.getChildCount() >= 0)


for (Enumeration e = node.children();
e.hasMoreElements();) {


TreeNode n = (TreeNode)
e.nextElement();


TreePath path =
parent.pathByAddingChild(n);


TreePath result = find(path,
nodes, depth + 1, byName);

// Found a match

if (result != null)

return result;

}

}

// No match at this branch

return null;

}





et a l'utilisation tu fais



TreePath path1 = tree.findByName(new String[] { root, node1 });

TreePath path2 = tree.findByName(new String[] { root, node1, node2, node3 });


WORA

Merci Twinuts 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de Twinuts
Meilleure réponse
cs_zazou1 48 Messages postés mardi 28 décembre 2004Date d'inscription 23 juillet 2010 Dernière intervention - 28 mars 2006 à 00:27
3
Merci
Réponse acceptée !
voila un bon code :
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;


public class Tree
{ public static void main (String [] args)
{

System.setProperty("Quaqua.tabLayoutPolicy","wrap");



// set the Quaqua Look and Feel in the UIManager
try {
UIManager.setLookAndFeel("ch.randelshofer.quaqua.QuaquaLookAndFeel");
// set UI manager properties here that affect Quaqua

} catch (Exception e) {
// take an appropriate action here

}
// insert your application initialization code here





JFrame frame =new SimpleTreeFrame();
frame.show();
}
}


class SimpleTreeFrame extends JFrame implements ActionListener
{ public SimpleTreeFrame()
{ setTitle("Simple Tree");
setSize(300,200);
addWindowListener (new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
} );
// construit l' arbre
TreeNode root = makeSampleTree();
model = new DefaultTreeModel (root);
tree = new JTree (model);
tree.setEditable(true);


// ajoute un panneau deroulant contenant un arbre
Container contentPane = getContentPane();
contentPane.add(new JScrollPane(tree),"Center") ;


// cree les boutons du panneau
JPanel panel = new JPanel();
addSiblingButton = new JButton ("Ajouter un frere");
addSiblingButton.addActionListener (this);
panel.add(addSiblingButton);
addChildButton = new JButton ("Ajouter un enfant");
addChildButton.addActionListener (this);
panel.add(addChildButton);
deleteButton = new JButton ("Supprimer");
deleteButton.addActionListener (this);
panel.add(deleteButton);
contentPane.add ( panel , "South");
}


public TreeNode makeSampleTree()
{
// la definition des donnees du modele d' arbre
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Monde");
DefaultMutableTreeNode country = new DefaultMutableTreeNode("USA");
root.add(country);
DefaultMutableTreeNode state = new DefaultMutableTreeNode("Californie");
country.add(state);
DefaultMutableTreeNode city = new DefaultMutableTreeNode("San Jose");
state.add(city);
city = new DefaultMutableTreeNode("Cupertino");
state.add(city);
city = new DefaultMutableTreeNode("Michigan");
state.add(city);
city = new DefaultMutableTreeNode("Ann Arbor");
state.add(city);
country = new DefaultMutableTreeNode("Allemagne");
root.add(country);
state = new DefaultMutableTreeNode("Schleswig-Holstein");
country.add(state);
city = new DefaultMutableTreeNode("Kiel");
state.add(city);
return root ;
}
public void actionPerformed(ActionEvent event )
{
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
if( selectedNode == null) return;
if( event.getSource().equals(deleteButton)) {
if (selectedNode.getParent() != null)
{ model.removeNodeFromParent(selectedNode);
return;
}
}
// add new node as sil
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("Nouveau");
if (event.getSource().equals ( addSiblingButton))
{ DefaultMutableTreeNode parent = (DefaultMutableTreeNode) selectedNode.getParent();
if(parent != null)
{ int selectedIndex = parent.getIndex(selectedNode);
model.insertNodeInto (newNode,parent, selectedIndex+1);
}
}
else if(event.getSource().equals(addChildButton))
{ model.insertNodeInto (newNode,selectedNode,selectedNode.getChildCount());
}
TreeNode[] nodes = model.getPathToRoot(newNode);
TreePath path = new TreePath(nodes);
tree.scrollPathToVisible(path);
}
private DefaultTreeModel model;
private JTree tree;
private JButton addChildButton,addSiblingButton, deleteButton,editButton;
}

Merci cs_zazou1 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de cs_zazou1
bloofi 388 Messages postés mercredi 1 octobre 2003Date d'inscription 3 mai 2006 Dernière intervention - 27 mars 2006 à 11:29
0
Merci
Coucou,



tu peux aussi ,en meme temps que tu construis ton arbre, stocker dans une hashmap les node avec pour cles leur id/nom :



hash.put("UUU" , new DefaultMutableTreeNode("UUU") );

etc...

apres tu peux facilement récupérer les node en fonction de leur id,
leur ajouter des fils, tout ca tout ca.... par contre c'est peut-etre
lourd a gérer.
Commenter la réponse de bloofi
alonsyl 348 Messages postés mardi 6 avril 2004Date d'inscription 6 novembre 2008 Dernière intervention - 27 mars 2006 à 12:13
0
Merci
oui, j'avais bien pensais a cela mais j'ai alors l'impression de stocker +ieurs fois la meme info : 1 fois dans le JTree et 1 fois dans le hashmap ...

enfin, pour l'instant et faute de mieux, j'etais justement en train de realiser ce prg via 1 ArrayList de mes noeuds ;-)

merci a toi,

alonsyl
Commenter la réponse de alonsyl

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.