Swing/TreeBackgroundSelectionColor のバックアップ差分(No.1)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/TreeBackgroundSelectionColor へ行く。
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:JTreeの選択背景色を変更 #navi(../) RIGHT:Posted by &author(aterai); at 2012-10-29 *JTreeの選択背景色を変更 [#qafe3f1f] JTreeのノード条件によって、その選択背景色を変更します。 -&jnlp; -&jar; -&zip; //#screenshot #ref(https://lh4.googleusercontent.com/-7JA4jpNa55U/UI1VhdHlkwI/AAAAAAAABVw/dAUHGh4q014/s800/TreeBackgroundSelectionColor.png) **サンプルコード [#e9085f3e] #code(link){{ class SelectionColorTreeCellRenderer extends DefaultTreeCellRenderer { @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); if(isSelected) { setParticularCondition(value); c.setForeground(getTextSelectionColor()); c.setBackground(getBackgroundSelectionColor()); if(leaf && value.toString().startsWith("a")) { c.setOpaque(true); c.setBackground(Color.RED); }else{ c.setOpaque(false); c.setBackground(getBackgroundSelectionColor()); } }else{ c.setForeground(getTextNonSelectionColor()); c.setBackground(getBackgroundNonSelectionColor()); } return c; } private Color color = null; private void setParticularCondition(Object value) { if(value instanceof DefaultMutableTreeNode) { Object uo = ((DefaultMutableTreeNode)value).getUserObject(); if(uo instanceof Color) { color = (Color)uo; return; } } color = null; } @Override public Color getBackgroundSelectionColor() { return color!=null ? color : super.getBackgroundSelectionColor(); } } }} **解説 [#dfd16025] 上記のサンプルでは、以下の条件でノードの選択背景色を変更しています。 - DefaultMutableTreeNode#getUserObject()がColorの場合、その色を選択背景色に変更 -- DefaultTreeCellRenderer#getBackgroundSelectionColor()をオーバーライド -- ノードアイコンの背景は選択状態にならず、ノードテキストの背景色のみ変更される - ノードテキストが "a" で始まる場合、選択背景色をColor.REDに変更 -- TreeCellRenderer#getTreeCellRendererComponent(...)で取得したコンポーネント(=JLabel)をsetOpaque(true)で不透明、setBackground(Color.RED)で背景色を赤に変更 -- ノードアイコン、テキストの背景色が共に選択状態になる Nimbus などの Look & Feel では、上記のような選択背景色にならない場合があります。 //**参考リンク **コメント [#cf353b4a] #comment