Swing/RolloverConnectionLines のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/RolloverConnectionLines へ行く。
- 1 (2021-11-08 (月) 02:44:02)
- 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
概要
JTreeのノード接続線や展開・折り畳みアイコンの表示・非表示をマウスカーソルのロールオーバーで切り替えます。
Screenshot
Advertisement
サンプルコード
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);
}
}
});
}
};
View in GitHub: Java, Kotlin解説
上記のサンプルではJTree
にMouseListener
を設定してマウスカーソルがJTree
上に存在するときだけノード接続線や展開・折り畳みアイコンを表示しています。
- ノード接続水平線
BasicTreeUI#paintHorizontalLine(...)
をオーバーライド
- ノード接続垂直線
BasicTreeUI#paintVerticalLine(...)
をオーバーライド
- 展開・折り畳みアイコン
BasicTreeUI#shouldPaintExpandControl(...)
をオーバーライド
参考リンク
- JTreeの水平垂直線を表示しない
UIManager.put("Tree.paintLines", Boolean.FALSE)
ですべてのJTree
でノード接続線を非表示にしている
- JTreeの展開、折畳みアイコンを非表示にする
UIManager.put("Tree.expandedIcon", new IconUIResource(emptyIcon))
で空アイコンを設定し、すべてのJTree
で展開アイコンを非表示にしている