Index: javax/swing/tree/DefaultTreeCellRenderer.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/tree/DefaultTreeCellRenderer.java,v retrieving revision 1.17 diff -u -r1.17 DefaultTreeCellRenderer.java --- javax/swing/tree/DefaultTreeCellRenderer.java 17 Aug 2005 13:46:29 -0000 1.17 +++ javax/swing/tree/DefaultTreeCellRenderer.java 17 Aug 2005 15:05:19 -0000 @@ -41,7 +41,9 @@ import java.awt.Component; import java.awt.Dimension; import java.awt.Font; +import java.awt.FontMetrics; import java.awt.Graphics; +import java.awt.Insets; import java.awt.Rectangle; import javax.swing.border.Border; @@ -50,6 +52,7 @@ import javax.swing.JTree; import javax.swing.UIDefaults; import javax.swing.UIManager; +import javax.swing.SwingUtilities; import javax.swing.plaf.UIResource; /** @@ -119,7 +122,7 @@ * borderSelectionColor */ protected Color borderSelectionColor; - + // ------------------------------------------------------------- // Initialization --------------------------------------------- @@ -391,7 +394,7 @@ this.selected = selected; this.hasFocus = hasFocus; setHorizontalAlignment(LEFT); - setOpaque(true); + setOpaque(false); setVerticalAlignment(TOP); setEnabled(true); super.setFont(UIManager.getLookAndFeelDefaults().getFont("Tree.font")); @@ -400,13 +403,14 @@ { super.setBackground(getBackgroundSelectionColor()); setForeground(getTextSelectionColor()); - setBorder(UIManager.getLookAndFeelDefaults().getBorder("Tree.selectionBorder")); + setBorderSelectionColor(UIManager.getLookAndFeelDefaults() + .getColor("Tree.selectionBorderColor")); } else { super.setBackground(getBackgroundNonSelectionColor()); setForeground(getTextNonSelectionColor()); - setBorder(UIManager.getLookAndFeelDefaults().getBorder("Tree.nonSelectionBorder")); + setBorderSelectionColor(null); } return this; @@ -421,19 +425,45 @@ { return super.getFont(); } - + /** - * paint + * Paints the value. The background is filled based on selected. * * @param g the graphics device. */ public void paint(Graphics g) - { - super.paint(g); - } + { + // paint background + Rectangle vr = new Rectangle(); + Rectangle ir = new Rectangle(); + Rectangle tr = new Rectangle(); + Insets insets = UIManager.getLookAndFeelDefaults() + .getBorder("Tree.selectionBorder").getBorderInsets(this); + FontMetrics fm = getToolkit().getFontMetrics(getFont()); + SwingUtilities.layoutCompoundLabel(((JLabel) this), fm, getText(), + getIcon(), getVerticalAlignment(), + getHorizontalAlignment(), + getVerticalTextPosition(), + getHorizontalTextPosition(), vr, ir, tr, + getIconTextGap()); + + g.setColor(super.getBackground()); + g.fillRect(tr.x, tr.y, tr.width, tr.height - insets.top - + insets.bottom); + + // paint border + Color b = getBorderSelectionColor(); + if (b != null) + { + g.setColor(b); + g.drawRect(tr.x, tr.y, tr.width, tr.height - insets.top - + insets.bottom); + } + super.paint(g); + } /** - * getPreferredSize + * returns the preferred size of the cell. * * @returns Dimension */