modification noeud jtree

Le
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.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Yliur
Le #22221931
Le Mon, 7 Jun 2010 11:07:13 +0200
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.



Hum... pourrais-tu décrire précisément ce que tu veux faire ?
bof
Le #22222301
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.
Yliur
Le #22223341
Le Mon, 7 Jun 2010 14:35:57 +0200
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.



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).
Yliur
Le #22223331
Le Mon, 7 Jun 2010 19:40:04 +0200
Yliur
Le Mon, 7 Jun 2010 14:35:57 +0200
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.

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 (...) ?
bof
Le #22225131
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.
bof
Le #22226771
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.
Yliur
Le #22228261
Le Tue, 8 Jun 2010 08:42:03 +0200
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.



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()).
Publicité
Poster une réponse
Anonyme