2 votes

Enregistrer des objets dans un JTree mais changer le nom affiché (java swing) ?

J'ai créé un JTree et l'ai rempli d'objets dans une ArrayList. Lorsque j'affiche le contenu du JTree avec mon interface graphique, je ne veux pas voir l'adresse mémoire où l'objet est stocké, mais une chaîne personnalisée.

par exemple : J'ajoute cet objet à mon arbre :

DefaultMutableTreeNode tempnode = new DefaultMutableTreeNode(workspaces.get(i));

Et ce que je vois sur mon interface graphique est :

package.workspace@1df38f3

Je veux un texte alternatif au lieu de

package.workspace@1df38f3

A afficher. Comment puis-je modifier mon code pour qu'il prenne en charge cette fonction ?

2voto

Pace Points 10393

JTree va appeler le toString sur les éléments que vous ajoutez et l'afficher. Si vous pouvez écrire une toString pour votre objet Workspace, cela résoudra votre problème. Si vous ne pouvez pas modifier l'objet Workspace, vous devez alors créer un objet enveloppant qui possède l'attribut toString que vous voulez.

2voto

Younes TARCHOUN Points 41

Essayez de @Override la méthode "toString()" de votre objet qui est dans la ArrayList.

class YourObject{
...
      @Override
      public String toString(){
           return "your string formatted here";
      }

...
}

2voto

StanislavL Points 31343

Lisez sur les TreeCellRenderers et créez le vôtre, par exemple en étendant DefaultTreeCellRenderer. Dans la méthode

Component getTreeCellRendererComponent(JTree tree, Object value,
                   boolean selected, boolean expanded,
                   boolean leaf, int row, boolean hasFocus)

Fournir toute logique souhaitée

1voto

gcooney Points 1241

Je recommande d'étendre JTree et de surcharger convertValueToText( JTree javadoc ). L'implémentation par défaut consiste à appeler toString mais vous pouvez le surcharger pour générer le texte que vous voulez. Il n'est pas nécessaire d'envelopper tous les objets de votre tableau ou de surcharger toString pour l'affichage (je préfère laisser toString pour les descriptions de débogage plutôt que pour le texte d'affichage).

0voto

thejartender Points 2704

Comme tout bon livre ou tutoriel sur Java vous l'enseigne, Apprenez à remplacer en java.lang.Object.toString()

Lisez l'API du langage Java et il est clairement indiqué que toutes les sous-classes doivent remplacer toString() . En procédant ainsi (dans votre cas), ces objets sont prêts à être transmis (par valeur de référence) au code qui définit le texte de l'interface graphique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X