---
category: swing
folder: RolloverConnectionLines
title: JTreeのノード接続線や展開折り畳みアイコンの表示状態をマウスカーソルのロールオーバーで切り替える
tags: [JTree, MouseListener]
author: aterai
pubdate: 2021-11-08T02:43:26+09:00
description: JTreeのノード接続線や展開・折り畳みアイコンの表示・非表示をマウスカーソルのロールオーバーで切り替えます。
image: https://drive.google.com/uc?id=1n1zUhfc3RSih07_Oy4Bby4HN4kaLxLDy
---
* Summary [#summary]
`JTree`のノード接続線や展開・折り畳みアイコンの表示・非表示をマウスカーソルのロールオーバーで切り替えます。
#download(https://drive.google.com/uc?id=1n1zUhfc3RSih07_Oy4Bby4HN4kaLxLDy)
* Source Code Examples [#sourcecode]
#code(link){{
JTree tree = new JTree() {
private boolean rollover;
private transient MouseAdapter rolloverHandler;
@Override public void updateUI() {
removeMouseListener(rolloverHandler);
super.updateUI();
rolloverHandler = new MouseAdapter() {
@Override public void mouseEntered(MouseEvent e) {
rollover = true;
repaint();
}
@Override public void mouseExited(MouseEvent e) {
rollover = false;
repaint();
}
};
addMouseListener(rolloverHandler);
setUI(new BasicTreeUI() {
@Override protected boolean shouldPaintExpandControl(
TreePath path, int row, boolean isExpanded,
boolean hasBeenExpanded, boolean isLeaf) {
return rollover && super.shouldPaintExpandControl(
path, row, isExpanded, hasBeenExpanded, isLeaf);
}
@Override protected void paintHorizontalLine(
Graphics g, JComponent c, int y, int left, int right) {
if (rollover) {
super.paintHorizontalLine(g, c, y, left, right);
}
}
@Override protected void paintVerticalLine(
Graphics g, JComponent c, int x, int top, int bottom) {
if (rollover) {
super.paintVerticalLine(g, c, x, top, bottom);
}
}
});
}
};
}}
* Description [#explanation]
* Description [#description]
上記のサンプルでは`JTree`に`MouseListener`を設定してマウスカーソルが`JTree`上に存在するときだけノード接続線や展開・折り畳みアイコンを表示しています。
- ノード接続水平線
-- `BasicTreeUI#paintHorizontalLine(...)`をオーバーライド
- ノード接続垂直線
-- `BasicTreeUI#paintVerticalLine(...)`をオーバーライド
- 展開・折り畳みアイコン
-- `BasicTreeUI#shouldPaintExpandControl(...)`をオーバーライド
* Reference [#reference]
- [[JTreeの水平垂直線を表示しない>Swing/TreePaintLines]]
-- `UIManager.put("Tree.paintLines", Boolean.FALSE)`ですべての`JTree`でノード接続線を非表示にしている
- [[JTreeの展開、折畳みアイコンを非表示にする>Swing/TreeExpandedIcon]]
-- `UIManager.put("Tree.expandedIcon", new IconUIResource(emptyIcon))`で空アイコンを設定し、すべての`JTree`で展開アイコンを非表示にしている
* Comment [#comment]
#comment
#comment