概要

ノード毎に内容の異なるJToolTipを表示するJTreeを作成します。

サンプルコード

tree = new JTree() {
  @Override public String getToolTipText(MouseEvent e) {
    Object o = null;
    TreePath path = getPathForLocation(e.getX(), e.getY());
    if (Objects.nonNull(path)) {
      o = path.getLastPathComponent();
    }
    return Objects.toString(o, "getToolTipText");
  }
};
//tree.setCellRenderer(new MyTreeCellRenderer(tree.getCellRenderer()));
ToolTipManager.sharedInstance().registerComponent(tree);
view all

解説

上記のサンプルでは、JTree#getToolTipText(MouseEvent)をオーバーライドしてJToolTipを表示しています。以下のようなセルレンダラーを使用する方法もあります。

class MyTreeCellRenderer implements TreeCellRenderer {
  private final TreeCellRenderer renderer;
  public MyTreeCellRenderer(TreeCellRenderer renderer) {
    this.renderer = renderer;
  }
  @Override public Component getTreeCellRendererComponent(
        JTree tree, Object value, boolean isSelected,
        boolean expanded, boolean leaf, int row, boolean hasFocus) {
    JComponent c = (JComponent) renderer.getTreeCellRendererComponent(
      tree, value, isSelected, expanded, leaf, row, hasFocus);
    c.setToolTipText(Objects.nonNull(value) ? value.toString() : null);
    return c;
  }
}

どちらの方法を使う場合でも、JTreeオブジェクトをToolTipManagerに登録する(もしくは、JTree#setToolTipTextメソッドでnull以外を指定しておく)必要があります。

ToolTipManager.sharedInstance().registerComponent(tree);
//tree.setToolTipText("dummy");

コメント