Use Tree Navigation
public static class

DefaultListCellRenderer.UIResource

extends DefaultListCellRenderer
implements UIResource
/*
 * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */


package javax.swing;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;

import java.awt.Component;
import java.awt.Color;
import java.awt.Rectangle;

import java.io.Serializable;
import sun.swing.DefaultLookup;


/**
 * Renders an item in a list.
 * <p>
 * <strong><a name="override">Implementation Note:</a></strong>
 * This class overrides
 * <code>invalidate</code>,
 * <code>validate</code>,
 * <code>revalidate</code>,
 * <code>repaint</code>,
 * <code>isOpaque</code>,
 * and
 * <code>firePropertyChange</code>
 * solely to improve performance.
 * If not overridden, these frequently called methods would execute code paths
 * that are unnecessary for the default list cell renderer.
 * If you write your own renderer,
 * take care to weigh the benefits and
 * drawbacks of overriding these methods.
 *
 * <p>
 *
 * <strong>Warning:</strong>
 * Serialized objects of this class will not be compatible with
 * future Swing releases. The current serialization support is
 * appropriate for short term storage or RMI between applications running
 * the same version of Swing.  As of 1.4, support for long term storage
 * of all JavaBeans<sup><font size="-2">TM</font></sup>
 * has been added to the <code>java.beans</code> package.
 * Please see {@link java.beans.XMLEncoder}.
 *
 * @author Philip Milne
 * @author Hans Muller
 */

public class DefaultListCellRenderer extends JLabel
   
implements ListCellRenderer, Serializable
{

   
/**
    * An empty <code>Border</code>. This field might not be used. To change the
    * <code>Border</code> used by this renderer override the
    * <code>getListCellRendererComponent</code> method and set the border
    * of the returned component directly.
    */

   
private static final Border SAFE_NO_FOCUS_BORDER = new EmptyBorder(1, 1, 1, 1);
   
private static final Border DEFAULT_NO_FOCUS_BORDER = new EmptyBorder(1, 1, 1, 1);
   
protected static Border noFocusBorder = DEFAULT_NO_FOCUS_BORDER;

   
/**
     * Constructs a default renderer object for an item
     * in a list.
     */

   
public DefaultListCellRenderer() {
       
super();
        setOpaque
(true);
        setBorder
(getNoFocusBorder());
        setName
("List.cellRenderer");
   
}

   
private Border getNoFocusBorder() {
       
Border border = DefaultLookup.getBorder(this, ui, "List.cellNoFocusBorder");
       
if (System.getSecurityManager() != null) {
           
if (border != null) return border;
           
return SAFE_NO_FOCUS_BORDER;
       
} else {
           
if (border != null &&
                   
(noFocusBorder == null ||
                    noFocusBorder
== DEFAULT_NO_FOCUS_BORDER)) {
               
return border;
           
}
           
return noFocusBorder;
       
}
   
}

   
public Component getListCellRendererComponent(
       
JList list,
       
Object value,
       
int index,
       
boolean isSelected,
       
boolean cellHasFocus)
   
{
        setComponentOrientation
(list.getComponentOrientation());

       
Color bg = null;
       
Color fg = null;

       
JList.DropLocation dropLocation = list.getDropLocation();
       
if (dropLocation != null
               
&& !dropLocation.isInsert()
               
&& dropLocation.getIndex() == index) {

            bg
= DefaultLookup.getColor(this, ui, "List.dropCellBackground");
            fg
= DefaultLookup.getColor(this, ui, "List.dropCellForeground");

            isSelected
= true;
       
}

       
if (isSelected) {
            setBackground
(bg == null ? list.getSelectionBackground() : bg);
            setForeground
(fg == null ? list.getSelectionForeground() : fg);
       
}
       
else {
            setBackground
(list.getBackground());
            setForeground
(list.getForeground());
       
}

       
if (value instanceof Icon) {
            setIcon
((Icon)value);
            setText
("");
       
}
       
else {
            setIcon
(null);
            setText
((value == null) ? "" : value.toString());
       
}

        setEnabled
(list.isEnabled());
        setFont
(list.getFont());

       
Border border = null;
       
if (cellHasFocus) {
           
if (isSelected) {
                border
= DefaultLookup.getBorder(this, ui, "List.focusSelectedCellHighlightBorder");
           
}
           
if (border == null) {
                border
= DefaultLookup.getBorder(this, ui, "List.focusCellHighlightBorder");
           
}
       
} else {
            border
= getNoFocusBorder();
       
}
        setBorder
(border);

       
return this;
   
}

   
/**
     * Overridden for performance reasons.
     * See the <a href="#override">Implementation Note</a>
     * for more information.
     *
     * @since 1.5
     * @return <code>true</code> if the background is completely opaque
     *         and differs from the JList's background;
     *         <code>false</code> otherwise
     */

   
@Override
   
public boolean isOpaque() {
       
Color back = getBackground();
       
Component p = getParent();
       
if (p != null) {
            p
= p.getParent();
       
}
       
// p should now be the JList.
       
boolean colorMatch = (back != null) && (p != null) &&
            back
.equals(p.getBackground()) &&
                        p
.isOpaque();
       
return !colorMatch && super.isOpaque();
   
}

   
/**
    * Overridden for performance reasons.
    * See the <a href="#override">Implementation Note</a>
    * for more information.
    */

   
@Override
   
public void validate() {}

   
/**
    * Overridden for performance reasons.
    * See the <a href="#override">Implementation Note</a>
    * for more information.
    *
    * @since 1.5
    */

   
@Override
   
public void invalidate() {}

   
/**
    * Overridden for performance reasons.
    * See the <a href="#override">Implementation Note</a>
    * for more information.
    *
    * @since 1.5
    */

   
@Override
   
public void repaint() {}

   
/**
    * Overridden for performance reasons.
    * See the <a href="#override">Implementation Note</a>
    * for more information.
    */

   
@Override
   
public void revalidate() {}
   
/**
    * Overridden for performance reasons.
    * See the <a href="#override">Implementation Note</a>
    * for more information.
    */

   
@Override
   
public void repaint(long tm, int x, int y, int width, int height) {}

   
/**
    * Overridden for performance reasons.
    * See the <a href="#override">Implementation Note</a>
    * for more information.
    */

   
@Override
   
public void repaint(Rectangle r) {}

   
/**
    * Overridden for performance reasons.
    * See the <a href="#override">Implementation Note</a>
    * for more information.
    */

   
@Override
   
protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
       
// Strings get interned...
       
if (propertyName == "text"
               
|| ((propertyName == "font" || propertyName == "foreground")
                   
&& oldValue != newValue
                   
&& getClientProperty(javax.swing.plaf.basic.BasicHTML.propertyKey) != null)) {

           
super.firePropertyChange(propertyName, oldValue, newValue);
       
}
   
}

   
/**
    * Overridden for performance reasons.
    * See the <a href="#override">Implementation Note</a>
    * for more information.
    */

   
@Override
   
public void firePropertyChange(String propertyName, byte oldValue, byte newValue) {}

   
/**
    * Overridden for performance reasons.
    * See the <a href="#override">Implementation Note</a>
    * for more information.
    */

   
@Override
   
public void firePropertyChange(String propertyName, char oldValue, char newValue) {}

   
/**
    * Overridden for performance reasons.
    * See the <a href="#override">Implementation Note</a>
    * for more information.
    */

   
@Override
   
public void firePropertyChange(String propertyName, short oldValue, short newValue) {}

   
/**
    * Overridden for performance reasons.
    * See the <a href="#override">Implementation Note</a>
    * for more information.
    */

   
@Override
   
public void firePropertyChange(String propertyName, int oldValue, int newValue) {}

   
/**
    * Overridden for performance reasons.
    * See the <a href="#override">Implementation Note</a>
    * for more information.
    */

   
@Override
   
public void firePropertyChange(String propertyName, long oldValue, long newValue) {}

   
/**
    * Overridden for performance reasons.
    * See the <a href="#override">Implementation Note</a>
    * for more information.
    */

   
@Override
   
public void firePropertyChange(String propertyName, float oldValue, float newValue) {}

   
/**
    * Overridden for performance reasons.
    * See the <a href="#override">Implementation Note</a>
    * for more information.
    */

   
@Override
   
public void firePropertyChange(String propertyName, double oldValue, double newValue) {}

   
/**
    * Overridden for performance reasons.
    * See the <a href="#override">Implementation Note</a>
    * for more information.
    */

   
@Override
   
public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) {}

   
/**
     * A subclass of DefaultListCellRenderer that implements UIResource.
     * DefaultListCellRenderer doesn't implement UIResource
     * directly so that applications can safely override the
     * cellRenderer property with DefaultListCellRenderer subclasses.
     * <p>
     * <strong>Warning:</strong>
     * Serialized objects of this class will not be compatible with
     * future Swing releases. The current serialization support is
     * appropriate for short term storage or RMI between applications running
     * the same version of Swing.  As of 1.4, support for long term storage
     * of all JavaBeans<sup><font size="-2">TM</font></sup>
     * has been added to the <code>java.beans</code> package.
     * Please see {@link java.beans.XMLEncoder}.
     */

   
public static class UIResource extends DefaultListCellRenderer
       
implements javax.swing.plaf.UIResource
   
{
   
}
}