Java Swing: comment puis-je définir comment un JTree affiche le « objet utilisateur »?
-
24-09-2019 - |
Question
Lorsque vous utilisez un JTree
, un « objet utilisateur » d'un DefaultMutableTreeNode
peut être réglée. Cela peut être de toute nature, mais pour l'afficher, sa valeur toString()
est utilisée. Ce n'est pas ce que je dois.
Comment puis-je changer le mode d'affichage d'un objet utilisateur?
NOTE:. Mon objet utilisateur a pour quelque chose de différent qu'un String
pour être en mesure de maintenir le mappage entre l'arbre et les objets utilisateur
La solution
Je ne comprends pas quel est votre problème.
Le DefaultMutableTreeNode
utilisera la méthode toString
sur l'objet utilisateur, car il est logique. Le JTree
a besoin de chaînes pour dessiner des objets à votre demande si l'objet de sa chaîne rapresentation est ok.
Si vous avez vraiment besoin pour éviter d'appeler toString
sur votre objet, vous aurez besoin d'un moyen de fournir une rapresentation chaîne de toute façon, mais vous devrez écrire votre propre MutableTreeNode
:
class MyTreeNode implements MutableTreeNode
{
UserObject yourObject;
MyTreeNode(UserObject yourObject)
{
this.yourObject = yourObject;
}
// implement all needed methods to handle children and so on
public String toString()
{
// then you can avoid using toString
return yourObject.sringRapresentation();
}
}
Mais je ne vois vraiment pas le point de le faire .. En outre, vous pouvez étendre la DefaultMutableTreeNode
en remplaçant la méthode de toString
, mais vous aurez besoin d'une référence supplémentaire à votre objet ou d'un downcasts sera nécessaire.
Si vous avez vraiment besoin d'une visualisation différente de celle d'une chaîne que vous devrez écrire votre propre rendu qui implémente TableCellRenderer
.
Autres conseils
Remplacer toString () sur votre objet utilisateur ou fournir un TreeCellRenderer , exemple de base
Une autre alternative si vous tenez à peu près le texte affiché pour l'objet utilisateur et ne voulez pas vous embêter avec TreeCellRender: étendre DTree et remplacer convertValueToText avec votre propre code qui crée une chaîne descriptive pour cet objet.