【发布时间】:2010-09-21 06:57:20
【问题描述】:
由于 JTree 和 TreeModel 不直接提供开箱即用的工具提示,您认为,为 JTree 提供特定于项目的工具提示的最佳方式是什么?
编辑:(之后回答我自己的问题。)
@Zarkonnen:感谢 getTooltipText 的想法。
我发现了另一种(可能还是更好一点)覆盖 DefaultTreeCellRenderer 的方法,并想分享它:
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);
}
}
【问题讨论】:
-
您的答案应该包含在答案中,以便人们对其进行投票。
-
DefaultTreeCellRenderer#getTreeCellRendererComponent 被调用了很多,使这个太重可能会使事情无法按预期工作。就像应该显示但不显示的工具提示一样。覆盖 JTree#getToolTipText(MouseEvent e) 仅在需要时调用,因此是更好的解决方案!
-
当我尝试这个时,工具提示没有出现。 Zarkonnen 的回答虽然有效。