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)
- 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()
などを使用する