JTreeのノード接続線や展開折り畳みアイコンの表示状態をマウスカーソルのロールオーバーで切り替える
Total: 878
, Today: 1
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
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
で展開アイコンを非表示にしている