Swing/TranslucentTree のバックアップの現在との差分(No.5)
-
category: swing
folder: TranslucentTree
title: JTreeを透明にし、選択状態を半透明にする
tags: [JTree, Translucent, Transparent, TreeCellRenderer, UIDefaults]
author: aterai
pubdate: 2013-01-14T00:01:16+09:00
description: JTreeの背景を透明にし、ノードの選択色を半透明にします。
image:
hreflang:
href: http://java-swing-tips.blogspot.com/2014/11/make-transparent-jtree-and-translucent.html href: https://java-swing-tips.blogspot.com/2014/11/make-transparent-jtree-and-translucent.html lang: en
概要
概要
JTree
の背景を透明にし、ノードの選択色を半透明にします。
Screenshot
Advertisement
サンプルコード
サンプルコード
class TransparentTreeCellRenderer extends DefaultTreeCellRenderer {
private final Color ALPHA_OF_ZERO = new Color(0x0, true);
@Override public Component getTreeCellRendererComponent(
JTree tree, Object value, boolean isSelected, boolean expanded,
boolean leaf, int row, boolean hasFocus) {
JComponent c = (JComponent) super.getTreeCellRendererComponent(
tree, value, isSelected, expanded, leaf, row, hasFocus);
c.setOpaque(false);
return c;
}
private final Color ALPHA_OF_ZERO = new Color(0, true);
#spanadd
#spanend
@Override public Color getBackgroundNonSelectionColor() {
return ALPHA_OF_ZERO;
}
#spanadd
#spanend
@Override public Color getBackgroundSelectionColor() {
return ALPHA_OF_ZERO;
}
}
class TranslucentTreeCellRenderer extends TransparentTreeCellRenderer {
private final Color backgroundSelectionColor = new Color(100, 100, 255, 100);
@Override public Color getBackgroundSelectionColor() {
return backgroundSelectionColor;
}
}
View in GitHub: Java, Kotlin解説
解説
- 左:
TreeCellRenderer
を半透明化-
JTree#setOpaque(false);
としてJTree
やJScrollPane
などを透明化 -
setOpaque(false)
でJTree
とJScrollPane
を透明化 DefaultTreeCellRenderer#getBackgroundNonSelectionColor(...)
をオーバーライドしてノードの背景色を透明化DefaultTreeCellRenderer#getBackgroundSelectionColor(...)
をオーバーライドしてノードの選択色を半透明化
-
- 右:
TreeCellRenderer
を透明化JTree#setOpaque(false);
としてJTree
やJScrollPane
などを透明化DefaultTreeCellRenderer#getBackgroundNonSelectionColor(...)
をオーバーライドしてノードの背景色を透明化DefaultTreeCellRenderer#getBackgroundSelectionColor(...)
をオーバーライドしてノードの選択色を透明化-
JTree#paintComponent(...)
をオーバーライドして、半透明の選択色でJTree
に直接選択状態を描画 -
JTree#paintComponent(...)
をオーバーライドして半透明の選択色でJTree
に直接選択状態を描画
-
SynthLookAndFeel
系のNimbusLookAndFeel
の場合、以下のような何も描画しないPainter
をノード選択に使用することで、選択色を半透明にすることができる- ただし、同じ
SynthLookAndFeel
系でも、GTKLookAndFeel
の場合は、SynthでJInternalFrameを半透明にするのように、SynthStyle#isOpaque(...)
がRegion.TREE_CELL
の時はfalse
になるように設定する必要がある
- ただし、同じ
-
SynthLookAndFeel
系のNimbusLookAndFeel
の場合、以下のような何も描画しないPainter
をノード選択に使用することでその選択色は半透明になる- ただし同じ
SynthLookAndFeel
系でもGTKLookAndFeel
の場合はSynthでJInternalFrameを半透明にするのようにSynthStyle#isOpaque(...)
がRegion.TREE_CELL
の時はfalse
になるように設定する必要がある
- ただし同じ
#spandel
//NimbusLookAndFeel(SynthLookAndFeel) JDK 1.7.0
#spanend
#spanadd
// NimbusLookAndFeel(SynthLookAndFeel) JDK 1.7.0
#spanend
UIDefaults d = new UIDefaults();
d.put("Tree:TreeCell[Enabled+Selected].backgroundPainter", new Painter<JComponent>() {
@Override public void paint(Graphics2D g, JComponent c, int width, int height) {
//Do nothing
// Do nothing
}
});
tree2.putClientProperty("Nimbus.Overrides", d);
tree2.putClientProperty("Nimbus.Overrides.InheritDefaults", false);