Java Swing: ¿Cómo se define cómo un JTree muestra el “objeto de usuario”?
-
24-09-2019 - |
Pregunta
Cuando se utiliza un JTree
, un "objeto de usuario" de un DefaultMutableTreeNode
se puede ajustar. Esto puede ser de cualquier tipo, pero para que se muestre, se utiliza su valor toString()
. Esto no es lo que necesito.
¿Cómo puedo cambiar la forma de visualización de un objeto de usuario?
NOTA:. Mi objeto de usuario tiene a ser algo diferente de un String
sea capaz de mantener la correspondencia entre el árbol y los objetos de usuario
Solución
No lo entiendo cuál es tu problema.
El DefaultMutableTreeNode
utilizará el método toString
en el objeto de usuario porque tiene sentido. Las cadenas necesidades JTree
para dibujar objetos por lo que pide a su objeto rapresentation su cadena está bien.
Si realmente necesita para evitar llamar toString
en el objeto que se va a necesitar una manera de proporcionar una serie de rapresentation de todos modos, pero tendrá que escribir su propio 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();
}
}
Pero realmente no veo el punto de hacer esto .. Además puede intentar extender el DefaultMutableTreeNode
por el método toString
de primer orden, pero se necesita una referencia adicional a su objeto o algún downcasts será necesario.
Si realmente necesita una visualización diferente de una cadena que tendrá que escribir su propio rendido que implementa TableCellRenderer
.
Otros consejos
toString Override () de su objeto de usuario o proporcionar un TreeCellRenderer , básica ejemplo
Otra alternativa si sólo se preocupan por los detalles para el objeto de usuario y no quieren molestarse con TreeCellRender: extender JTree y anulación convertValueToText con su propio código que crea una cadena descriptiva para ese objeto.