Java Swing: come faccio a definire come un JTree visualizza il “oggetto utente”?
-
24-09-2019 - |
Domanda
Quando si utilizza una JTree
, un "oggetto utente" di un DefaultMutableTreeNode
può essere impostato. Questo può essere di qualsiasi tipo, ma per visualizzarlo, viene utilizzato il valore toString()
. Questo non è quello che mi serve.
Come faccio a cambiare il modo in cui viene visualizzato un oggetto utente?
. NOTA: Il mio oggetto utente ha di essere qualcosa di diverso da un String
per essere in grado di mantenere la corrispondenza tra l'albero e gli oggetti utente
Soluzione
Non capisco qual è il tuo problema.
Il DefaultMutableTreeNode
utilizzerà il metodo toString
sull'oggetto utente perché ha senso. Le stringhe bisogni JTree
per disegnare oggetti in modo chiedere al vostro oggetto la sua rappresentazione stringa è ok.
Se si ha realmente bisogno per evitare di chiamare toString
sul vostro oggetto avrete bisogno di un modo per fornire una rappresentazione stringa di esso in ogni caso, ma si dovrà scrivere il proprio 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();
}
}
Ma io davvero non vedo il punto di fare questo .. in aggiunta si può provare a estendere il DefaultMutableTreeNode
con il metodo toString
l'override, ma è necessario un ulteriore riferimento al vostro oggetto o un po 'di downcasts saranno necessarie.
Se si ha realmente bisogno di una visualizzazione diversa da una stringa si dovrà scrivere il proprio reso che implementa TableCellRenderer
.
Altri suggerimenti
Override toString () sul vostro oggetto utente o fornire un TreeCellRenderer , esempio di base
Un'altra alternativa se si preoccupa per il testo mostrato per l'oggetto utente e non vogliono perdere tempo con TreeCellRender: estendere JTree e di override convertValueToText con il tuo proprio codice che crea una stringa descrittiva per quell'oggetto.