Swing/RolloverConnectionLines の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/RolloverConnectionLines へ行く。
- Swing/RolloverConnectionLines の差分を削除
--- 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] JTreeのノード接続線や展開・折り畳みアイコンの表示・非表示をマウスカーソルのロールオーバーで切り替えます。 `JTree`のノード接続線や展開・折り畳みアイコンの表示・非表示をマウスカーソルのロールオーバーで切り替えます。 #download(https://drive.google.com/uc?id=1n1zUhfc3RSih07_Oy4Bby4HN4kaLxLDy) * サンプルコード [#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); } } }); } }; }} * 解説 [#explanation] 上記のサンプルでは`JTree`に`MouseListener`を設定してマウスカーソルが`JTree`上に存在するときだけノード接続線や展開・折り畳みアイコンを表示しています。 - ノード接続水平線 -- `BasicTreeUI#paintHorizontalLine(...)`をオーバーライド - ノード接続垂直線 -- `BasicTreeUI#paintVerticalLine(...)`をオーバーライド - 展開・折り畳みアイコン -- `BasicTreeUI#shouldPaintExpandControl(...)`をオーバーライド * 参考リンク [#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