Comment puis-je auto-développer un JTree lors de la définition d'un nouveau TreeModel?
J'ai un custom JTree
et personnalisé JModel
; je le ferais pour le JTree à "auto-étendre" quand je lui donne un nouveau modèle. Pour le moment, c'est tout simplement l'effondrement de tous les nœuds de la racine.
Voici un exemple:
private class CustomTree extends JTree {
@Override
public boolean isExpanded(TreePath path) {
return ((Person) path.getLastPathComponent).hasChildren();
}
private class CustomTreeModel extends TreeModel {
//... omitting various implementation details
@Override
public boolean isLeaf(Object object) {
return !((Person) object).hasChildren();
}
}
Model model = new Model();
Person bob = new Person();
Person alice = new Person();
bob.addChild(alice);
model.setRoot(bob);
JTree tree = new CustomTree(new CustomTreeModel(model));
À ce stade, l'arbre affiche correctement:
- BOB
- ALICE
où Alice est une enfant de Bob (à la fois dans les données et dans l'arborescence visuelle)
Cependant, si je l'appelle:
tree.setModel(new CustomTreeModel(model));
tout est effondré:
+ BOB
Est-il un moyen de "s'auto-développer" tout dans l'arbre lors de la définition d'un nouveau modèle?
pas d'idées de ce code et la description, tous les déclarants & auditeur disparaître après le modèle est modifié,
Je crois que ma réponse ci-dessous résout mon problème.
🙂 ............... ne pas utiliser d'index par type int, vous pouvez perdu cet indice, à stocker tous accessible sur le nœud inc. La valeur de l'objet (de mon point de vue)
Étendre sur la définition d'un nouveau modèle. Pour mieux aider plus tôt, après une SSCCE.
Je suis désolé, je ne comprends pas très bien - je peux perdre de l'arbre.getRowCount() index? Comment?
Je crois que ma réponse ci-dessous résout mon problème.
🙂 ............... ne pas utiliser d'index par type int, vous pouvez perdu cet indice, à stocker tous accessible sur le nœud inc. La valeur de l'objet (de mon point de vue)
Étendre sur la définition d'un nouveau modèle. Pour mieux aider plus tôt, après une SSCCE.
Je suis désolé, je ne comprends pas très bien - je peux perdre de l'arbre.getRowCount() index? Comment?
OriginalL'auteur sdasdadas | 2013-03-04
Vous devez vous connecter pour publier un commentaire.
J'ai eu un problème similaire.
Votre solution (posté https://stackoverflow.com/a/15211697/837530) semblait fonctionner pour moi uniquement pour le niveau supérieur de l'arborescence de nœuds.
Mais j'ai besoin de développer tous les descendants du nœud. J'ai donc résolu avec la méthode récursive:
qui est invoqué avec
où,
tree
est unJTree
.Sauf si quelqu'un a une meilleure solution.
OriginalL'auteur Sa'ad
La suite travaillé pour moi (appelé après la création du nouveau modèle):
Comme pour les "pourquoi": il fonctionne parce que
expandRow()
montrer plus de lignes, de prise degetRowCount()
augmenter après chaque développement. Essayer d'être intelligent par le stockage den = getRowCount()
etfor (i=0; i<n; i++)
ne fonctionnera pas.OriginalL'auteur sdasdadas
Il y a aussi cette non-récursive version.
OriginalL'auteur ConorR
cela a fonctionné pour moi..
OriginalL'auteur mattymanme
Depuis je ne peut ni modifier, ni commentaire sur la accepté de répondre pour répondre à l'OP dernière question:
Pour développer l'arborescence après, un nouveau modèle est attribué (comme demandé par l'OP), remplacer
treeDidChange()
dans votre arborescence personnalisée:OriginalL'auteur Jay
TreeUtils que vous obtenez à partir de jidesoft.
Ce n'est pas opensource de la bibliothèque, mais si vous l'avez, vous pouvez simplement développer tous treenode.
http://www.jidesoft.com/javadoc/com/jidesoft/tree/TreeUtils.html
OriginalL'auteur user3983136