La meilleure façon de mettre les info-bulles pour JTree?
depuis JTree & TreeModel ne fournissons pas les info-bulles tout droit sorti de la boîte, qu'en pensez-vous, quelle serait la meilleure façon d'avoir de l'élément spécifique info-bulles pour les JTree?
Edit: (pour Répondre à ma propre question par la suite.)
@Zarkonnen: Merci pour le getTooltipText idée.
J'ai trouvé un autre (peut-être encore un peu plus) de manière à substituer DefaultTreeCellRenderer et pensé le partager:
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);
}
}
- Votre réponse doit être dans une réponse, afin que les gens peuvent voter pour elle.
- DefaultTreeCellRenderer#getTreeCellRendererComponent est appelé beaucoup de choses et faire de ce trop lourd peut faire des trucs pas fonctionner comme prévu. Comme les info-bulles qui devrait montrer, mais ne le font pas. Primordial JTree#getToolTipText(MouseEvent e) n'est appelée que lorsque c'est nécessaire et en tant que tel est une bien meilleure solution!
- Lorsque j'ai essayé ce que l'info-bulle n'apparaissent pas. Zarkonnen réponse fonctionné bien.
Vous devez vous connecter pour publier un commentaire.
Voir getTooltipText sur JTree. Cela devrait vous permettre d'afficher les info-bulles en fonction de ce qui dans l'arbre est survolé. (Lire les docs, vous devez enregistrer le JTree avec le ToolTipManager.)
ToolTipManager
. Même si c'est dans les docs, il est facile de rater.Oui, vous pouvez utiliser
onMouseMoved
et ensuite utiliser une méthode (je ne me souviens pas le nom) qui vous dit que dans le nœud qui vous sont plus. Si vous obtenez null, évidemment, vous n'êtes pas sur un nœud.getPathForLocation(int, int)
etgetRowForLocation(int, int)
. Comme suggéré par d'autres réponses, la mise en œuvre personnalisée de rendu ou de la transgression degetToolTipText(MouseEvent)
est plus propre que l'ajout d'unMouseListener
.Lorsqu'ils s'occupent d'
TreeNode
sous-classes, en fonction de vos propres réponses et commentaires, je suis venu avec une interface pour monTreeNode
à mettre en œuvre.Remarquez comment nous vérifions si le
value
est une intance deTooltipable
dans leTreeCellRenderer
: