Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

modification noeud jtree

7 réponses
Avatar
bof
bonjour à toutes et à tous,

question d'un débutant de chez débutant :
je tente de modifier les noeuds d'un jtree comme suit :

======================================================================
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
class fenetre extends JFrame implements TreeSelectionListener
{ private JTree nomTree;
private DefaultTreeModel modelTree;
private DefaultMutableTreeNode noeud,racine;
private Integer i;
public fenetre()
{ racine = new DefaultMutableTreeNode("Racine") ;
nomTree=new JTree();
for ( i=1;i<10;i++ )
{ racine.add( new DefaultMutableTreeNode( i ) ); }
modelTree = new DefaultTreeModel( racine );
nomTree.setModel( modelTree );
this.add( nomTree );
this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
this.setSize( 500, 300 );
this.setVisible( true );
nomTree.addTreeSelectionListener( this );
}
public void valueChanged( TreeSelectionEvent e )
{ noeud =(DefaultMutableTreeNode)nomTree.getLastSelectedPathComponent();
if ( !noeud.isRoot() )
{
Integer s = new Integer(noeud.toString());
s++;
noeud = new DefaultMutableTreeNode( s );
// calcul ok, mais non affiché ==> faire un reload ?
modelTree.reload( noeud );
// "plante" mais uniquement si le ligne précédente
// noeud = new DefaultMutableTreeNode( s ); est exécuté
// si on la met en commentaire ça passe
}
}
}
public class minimum
{ public static void main( String[] args )
{ fenetre fen=new fenetre(); }
}
======================================================================

tout est là :
noeud = new DefaultMutableTreeNode( s );
modelTree.reload( noeud );
quelque chose m'échappe, j'ai beau lire et relire
ce que je trouve à propos de ce que je voudrais faire
je ne comprend pas comment le faire.
si vous pouviez m'aider, au moins m'aiguiller...
merci d'avance.

7 réponses

Avatar
Yliur
Le Mon, 7 Jun 2010 11:07:13 +0200
bof a écrit :


bonjour à toutes et à tous,

question d'un débutant de chez débutant :
je tente de modifier les noeuds d'un jtree comme suit :

======================== ========================= =====================
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
class fenetre extends JFrame implements TreeSelectionListener
{ private JTree nomTree;
private DefaultTreeModel modelTree;
private DefaultMutableTreeNode noeud,racine;
private Integer i;
public fenetre()
{ racine = new DefaultMutableTreeNode("Racine") ;
nomTree=new JTree();
for ( i=1;i<10;i++ )
{ racine.add( new
DefaultMutableTreeNode( i ) ); } modelTree = new
DefaultTreeModel( racine ); nomTree.setModel( modelTree );
this.add( nomTree );
this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
this.setSize( 500, 300 );
this.setVisible( true );
nomTree.addTreeSelectionListener( this );
}
public void valueChanged( TreeSelectionEvent e )
{ noeud
=(DefaultMutableTreeNode)nomTree.getLastSelectedPathComponent(); if
( !noeud.isRoot() ) {
Integer s = new Integer(noeud.toString());
s++;
noeud = new DefaultMutableTreeNode( s );
// calcul ok, mais non affiché ==> faire un reload ?
modelTree.reload( noeud );
// "plante" mais uniquement si le ligne précédente
// noeud = new DefaultMutableTreeNode( s ); est exécuté
// si on la met en commentaire ça passe
}
}
}
public class minimum
{ public static void main( String[] args )
{ fenetre fen=new fenetre(); }
}
======================== ========================= =====================

tout est là :
noeud = new DefaultMutableTreeNode( s );
modelTree.reload( noeud );
quelque chose m'échappe, j'ai beau lire et relire
ce que je trouve à propos de ce que je voudrais faire
je ne comprend pas comment le faire.
si vous pouviez m'aider, au moins m'aiguiller...
merci d'avance.



Hum... pourrais-tu décrire précisément ce que tu veux faire ?
Avatar
bof
Hum... pourrais-tu décrire précisément ce que tu veux faire ?



modifier ce qui est affiché dans les noeuds.
l'exemple mis n'est qu'une simplification
de ce que je voudrais faire : en gros sur
chaque noeud il y a u compteur que je dois
incrémenter/décrémenter.

merci de ton intervention.
Avatar
Yliur
Le Mon, 7 Jun 2010 14:35:57 +0200
bof a écrit :

> Hum... pourrais-tu décrire précisément ce que tu veux faire ?

modifier ce qui est affiché dans les noeuds.
l'exemple mis n'est qu'une simplification
de ce que je voudrais faire : en gros sur
chaque noeud il y a u compteur que je dois
incrémenter/décrémenter.

merci de ton intervention.



A mon avis tu ne dois pas recréer le noeud (noeud = new ...).
Tu devrais plutôt modifier le contenu du noeud (sa valeur).

Et ça me paraît normal que reload fasse la tête quand tu lui demande de
recharger un noeud que tu viens de créer, parce que ce noeud ne se
trouve pas dans l'arbre (contrairement au cas où tu ne fais pas le new).
Avatar
Yliur
Le Mon, 7 Jun 2010 19:40:04 +0200
Yliur a écrit :

Le Mon, 7 Jun 2010 14:35:57 +0200
bof a écrit :

> > Hum... pourrais-tu décrire précisément ce que tu veux faire ?
>
> modifier ce qui est affiché dans les noeuds.
> l'exemple mis n'est qu'une simplification
> de ce que je voudrais faire : en gros sur
> chaque noeud il y a u compteur que je dois
> incrémenter/décrémenter.
>
> merci de ton intervention.

A mon avis tu ne dois pas recréer le noeud (noeud = new ...).
Tu devrais plutôt modifier le contenu du noeud (sa valeur).

Et ça me paraît normal que reload fasse la tête quand tu lui demande
de recharger un noeud que tu viens de créer, parce que ce noeud ne se
trouve pas dans l'arbre (contrairement au cas où tu ne fais pas le
new).




noeud.setUserObject (...) ?
Avatar
bof
noeud.setUserObject (...) ?



désolé du temps de réponse,
je ne suis pas aussi disponible que je le souhaiterais.

effectivement, avec
Integer s = new Integer(noeud.toString());
s++;
noeud.setUserObject(s);
ça baigne beuacoup mieux.
il reste à modifier la taille de l'affichage, car,
dans l'exemple, passer de 9 à 10 affiche "..."

presque nickel.
Avatar
bof
il reste à modifier la taille de l'affichage, car,
dans l'exemple, passer de 9 à 10 affiche "..."


je ne sais pas si c'est ce qu'il
y a de "mieux" à faire, mais avec
modelTree.reload(noeud);
bah.. c'est ok.
merci Yliur.
Avatar
Yliur
Le Tue, 8 Jun 2010 08:42:03 +0200
bof a écrit :

> noeud.setUserObject (...) ?

désolé du temps de réponse,
je ne suis pas aussi disponible que je le souhaiterais.

effectivement, avec
Integer s = new Integer(noeud.toString());
s++;
noeud.setUserObject(s);
ça baigne beuacoup mieux.
il reste à modifier la taille de l'affichage, car,
dans l'exemple, passer de 9 à 10 affiche "..."

presque nickel.



Si vous mettez un entier dans le noeud, vous devez pouvoir le récupérer
par Integer s = (Integer) noeud.getUserObject() ;

C'est ce nombre que vous voulez manipuler, pas sa représentation sous
forme de chaîne (ce qui est renvoyé par toString()).