001 /* 002 * $Header: /usr/local/cvs/java-tools/eclipse/code-templates.xml,v 1.1 003 * 2003/09/12 18:17:04 keith Exp $ $Revision: 475 $ $Date: 2004-10-31 19:58:48 +0100 (Sun, 31 Oct 2004) $ 004 * 005 * Copyright Computer Science Innovations (CSI), 2003. All rights reserved. 006 */ 007 package org.springframework.richclient.tree; 008 009 import java.awt.Color; 010 import java.awt.Component; 011 import java.awt.SystemColor; 012 013 import javax.swing.JTree; 014 import javax.swing.border.LineBorder; 015 import javax.swing.tree.DefaultTreeCellRenderer; 016 017 /** 018 * This renderer differs from the default Swing list renderer in that it 019 * displays the currently selected item differently when the list has the focus. 020 * This is more like Windows behavior. I think that this behavior makes it 021 * easier for the user to track the focus when the focus changes. 022 * 023 * This class should be subclasses and the setText and setIcon methods should be 024 * called before calling getTreeCellRendererComponent 025 * 026 */ 027 public class FocusableTreeCellRenderer extends DefaultTreeCellRenderer { 028 protected static LineBorder windowsListBorder = new LineBorder(SystemColor.controlDkShadow); 029 030 public FocusableTreeCellRenderer() { 031 } 032 033 public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, 034 boolean leaf, int row, boolean hasFocus) { 035 super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); 036 037 Color colorForeground; 038 Color colorBackground; 039 if (sel) { 040 if (tree.hasFocus()) { 041 colorBackground = SystemColor.textHighlight; 042 colorForeground = SystemColor.textHighlightText; 043 } 044 else { 045 colorForeground = SystemColor.controlText; 046 colorBackground = SystemColor.control; 047 } 048 setBackgroundSelectionColor(colorBackground); 049 } 050 else { 051 colorForeground = tree.getForeground(); 052 colorBackground = tree.getBackground(); 053 setBackgroundNonSelectionColor(colorBackground); 054 } 055 setForeground(colorForeground); 056 057 return this; 058 } 059 }