• category: swing folder: TreeToolTips title: JTreeのToolTipsを表示 tags: [JTree, JToolTip, ToolTipManager, TreeCellRenderer] author: aterai pubdate: 2007-06-04T19:46:36+09:00 description: ノード毎に内容の異なるJToolTipを表示するJTreeを作成します。 image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTWQe1RL2I/AAAAAAAAAo8/6HFqbUb3UZ8/s800/TreeToolTips.png

概要

ノード毎に内容の異なる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");
  }
};
#spandel
//tree.setCellRenderer(new MyTreeCellRenderer(tree.getCellRenderer()));
#spanend
#spanadd
// tree.setCellRenderer(new MyTreeCellRenderer(tree.getCellRenderer()));
#spanend
ToolTipManager.sharedInstance().registerComponent(tree);
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、JTree#getToolTipText(MouseEvent)をオーバーライドしてJToolTipを表示しています。以下のようなセルレンダラーを使用する方法もあります。
  • JTree#getToolTipText(MouseEvent)メソッドをオーバーライドしてJToolTipで表示する文字列を変更
  • ツールチップ表示を有効にするにはJTreeオブジェクトをToolTipManagerに登録するか、JTree#setToolTipText(...)メソッドでnull以外を指定しておく必要がある
    #spanend
    #spanadd
    ToolTipManager.sharedInstance().registerComponent(tree);
    #spanend
    #spanadd
    // tree.setToolTipText("non null text");
    #spanend
    #spanadd
    
  • セルレンダラーを使用する別方法
    class MyTreeCellRenderer implements TreeCellRenderer {
      private final TreeCellRenderer renderer;
      public MyTreeCellRenderer(TreeCellRenderer renderer) {
        this.renderer = renderer;
      }
    #spanadd
    
    #spanend
      @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以外を指定しておく)必要があります。
#spanend
#spandel
ToolTipManager.sharedInstance().registerComponent(tree);
#spanend
#spandel
//tree.setToolTipText("dummy");
#spanend
#spandel

参考リンク

コメント