sirve simple seleccionar que para nodo example ejemplos defaultmutabletreenode java swing tooltip jtree

simple - seleccionar un nodo en jtree java



¿La mejor forma de implementar tooltips para JTree? (3)

Sí, puedes usar onMouseMoved y luego usar un método (no recuerdo el nombre) que te indique en qué nodo estás. Si obtienes nulo, obviamente no estás sobre un nodo.

ya que J Tree y TreeModel no proporcionan información sobre herramientas directamente desde el primer momento, ¿cuál cree que sería la mejor manera de tener información sobre herramientas específicas para cada artículo para JTree?

Editar: (Respondiendo a mi propia pregunta después).

@Zarkonnen: gracias por la idea getTooltipText.

Descubrí otra forma (quizás aún un poco mejor) de anular DefaultTreeCellRenderer y pensé en compartirla:

public class JTreeWithToolTips { private static class OwnRenderer extends DefaultTreeCellRenderer { @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { setToolTipText("foobar" + row); return super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); } } public static void main(String[] args) { JTree tree = new JTree(new Object[] { "foo", "bar", "foobar" }); tree.setCellRenderer(new OwnRenderer()); ToolTipManager.sharedInstance().registerComponent(tree); JFrame frame = new JFrame(); frame.getContentPane().add(tree); frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }


Ver getTooltipText en JTree. Esto debería permitirle mostrar información sobre herramientas según lo que esté sobrevolando el árbol. (Sin embargo, lea los documentos, debe registrar el JTree con el ToolTipManager).


Al tratar con subclases TreeNode específicas, en función de su propia respuesta y comentarios, se me ocurrió una interfaz para implementar TreeNode .

Observe cómo verificamos si el value es una integridad de Tooltipable en TreeCellRenderer :

public static interface Tooltipable { public String getToolTip(); } public static class TheNode extends DefaultMutableTreeNode implements Tooltipable { private String shortDesc, longDesc; public TheNode(String shortDesc, String longDesc) { super(); this.shortDesc = shortDesc; this.longDesc = longDesc; } @Override public String getToolTip() { return longDesc; } @Override public String toString() { return shortDesc; } } public static class TheModel extends DefaultTreeModel { public TheModel() { super(new TheNode("Root", "The base of everything")); TheNode root = (TheNode)getRoot(); root.add(new TheNode("Second", "I am a number two")); TheNode node = new TheNode("Third", "Another one bites the dust"); root.add(node); node.add(new TheNode("Last", null)); // No tooltip for this one } } public static class TreeTooltipRenderer extends DefaultTreeCellRenderer { @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { if (value instanceof Tooltipable) setToolTipText(((Tooltipable)value).getToolTip()); return super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); } } public static void main(String[] args) { JFrame frame = new JFrame(); frame.setBounds(100, 100, 300, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTree tree = new JTree(new TheModel()); ToolTipManager.sharedInstance().registerComponent(tree); tree.setCellRenderer(new TreeTooltipRenderer()); frame.add(new JScrollPane(tree), BorderLayout.CENTER); frame.setVisible(true); }