Swing/RollOverTree のバックアップ(No.11)
- バックアップ一覧
 - 差分 を表示
 - 現在との差分 を表示
 - 現在との差分 - Visual を表示
 - ソース を表示
 - Swing/RollOverTree へ行く。
  
- 1 (2007-05-21 (月) 05:44:50)
 - 2 (2007-06-04 (月) 14:16:04)
 - 3 (2010-10-18 (月) 14:51:47)
 - 4 (2011-05-14 (土) 15:09:01)
 - 5 (2011-06-02 (木) 14:24:53)
 - 6 (2013-02-06 (水) 02:14:44)
 - 7 (2015-01-07 (水) 16:18:28)
 - 8 (2015-02-27 (金) 12:03:38)
 - 9 (2015-03-11 (水) 18:29:28)
 - 10 (2017-02-07 (火) 13:13:38)
 - 11 (2017-12-23 (土) 16:21:03)
 - 12 (2019-12-12 (木) 15:16:53)
 - 13 (2021-06-15 (火) 11:49:37)
 - 14 (2025-01-03 (金) 08:57:02)
 - 15 (2025-01-03 (金) 09:01:23)
 - 16 (2025-01-03 (金) 09:02:38)
 - 17 (2025-01-03 (金) 09:03:21)
 - 18 (2025-01-03 (金) 09:04:02)
 - 19 (2025-06-19 (木) 12:41:37)
 - 20 (2025-06-19 (木) 12:43:47)
 
 
- category: swing
folder: RollOverTree
title: JTreeのノードをハイライト
tags: [JTree, TreeCellRenderer, MouseMotionListener]
author: aterai
pubdate: 2007-05-21T05:44:50+09:00
description: JTreeのノード上にマウスカーソルがきたら、ハイライト表示します。
image: 

 
概要
JTreeのノード上にマウスカーソルがきたら、ハイライト表示します。
Screenshot

Advertisement
サンプルコード
private final JTree tree = new JTree(makeModel()) {
  private final Color rolloverRowColor = new Color(220, 240, 255);
  private int rollOverRowIndex = -1;
  private transient MouseMotionListener listener;
  @Override public void updateUI() {
    removeMouseMotionListener(listener);
    super.updateUI();
    setCellRenderer(new DefaultTreeCellRenderer() {
      @Override public Component getTreeCellRendererComponent(
          JTree tree, Object value, boolean selected, boolean expanded,
          boolean leaf, int row, boolean hasFocus) {
        JComponent c = (JComponent) super.getTreeCellRendererComponent(
            tree, value, selected, expanded, leaf, row, hasFocus);
        if (row == rollOverRowIndex) {
          c.setOpaque(true);
          c.setBackground(rolloverRowColor);
          if (selected) {
            c.setForeground(getTextNonSelectionColor());
          }
        } else {
          c.setOpaque(false);
        }
        return c;
      }
    });
    listener = new MouseAdapter() {
      @Override public void mouseMoved(MouseEvent e) {
        int row = getRowForLocation(e.getX(), e.getY());
        if (row != rollOverRowIndex) {
          rollOverRowIndex = row;
          repaint();
        }
      }
    };
    addMouseMotionListener(listener);
  }
};
View in GitHub: Java, Kotlin解説
JTreeにMouseMotionListenerを設定して現在マウスカーソルが存在する行を記録DefaultTreeCellRenderer#getTreeCellRendererComponent(...)メソッドをオーバーライドし、カーソル行の場合はノードの不透明設定(setOpaque(true))と背景色を変更(setForeground(Color))DefaultTreeCellRendererは、JTableとは異なり、DefaultTreeCellRenderer#getTextNonSelectionColor()などのメソッドが使用可能DefaultTableCellRendererに選択時の文字色や背景色を取得するメソッドはなく、JTable#getSelectionBackground()などを使用する