1. /*
  2. * @(#)DefaultListCellRenderer.java 1.22 03/01/23
  3. *
  4. * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package javax.swing;
  8. import javax.swing.*;
  9. import javax.swing.event.*;
  10. import javax.swing.border.*;
  11. import java.awt.Component;
  12. import java.awt.Color;
  13. import java.awt.Rectangle;
  14. import java.io.Serializable;
  15. /**
  16. * Renders an item in a list.
  17. * <p>
  18. * <strong><a name="override">Implementation Note:</a></strong>
  19. * This class overrides
  20. * <code>validate</code>,
  21. * <code>revalidate</code>,
  22. * <code>repaint</code>,
  23. * and
  24. * <code>firePropertyChange</code>
  25. * solely to improve performance.
  26. * If not overridden, these frequently called methods would execute code paths
  27. * that are unnecessary for the default list cell renderer.
  28. * If you write your own renderer,
  29. * take care to weigh the benefits and
  30. * drawbacks of overriding these methods.
  31. *
  32. * <p>
  33. *
  34. * <strong>Warning:</strong>
  35. * Serialized objects of this class will not be compatible with
  36. * future Swing releases. The current serialization support is
  37. * appropriate for short term storage or RMI between applications running
  38. * the same version of Swing. As of 1.4, support for long term storage
  39. * of all JavaBeans<sup><font size="-2">TM</font></sup>
  40. * has been added to the <code>java.beans</code> package.
  41. * Please see {@link java.beans.XMLEncoder}.
  42. *
  43. * @version 1.22 01/23/03
  44. * @author Philip Milne
  45. * @author Hans Muller
  46. */
  47. public class DefaultListCellRenderer extends JLabel
  48. implements ListCellRenderer, Serializable
  49. {
  50. protected static Border noFocusBorder;
  51. /**
  52. * Constructs a default renderer object for an item
  53. * in a list.
  54. */
  55. public DefaultListCellRenderer() {
  56. super();
  57. if (noFocusBorder == null) {
  58. noFocusBorder = new EmptyBorder(1, 1, 1, 1);
  59. }
  60. setOpaque(true);
  61. setBorder(noFocusBorder);
  62. }
  63. public Component getListCellRendererComponent(
  64. JList list,
  65. Object value,
  66. int index,
  67. boolean isSelected,
  68. boolean cellHasFocus)
  69. {
  70. setComponentOrientation(list.getComponentOrientation());
  71. if (isSelected) {
  72. setBackground(list.getSelectionBackground());
  73. setForeground(list.getSelectionForeground());
  74. }
  75. else {
  76. setBackground(list.getBackground());
  77. setForeground(list.getForeground());
  78. }
  79. if (value instanceof Icon) {
  80. setIcon((Icon)value);
  81. setText("");
  82. }
  83. else {
  84. setIcon(null);
  85. setText((value == null) ? "" : value.toString());
  86. }
  87. setEnabled(list.isEnabled());
  88. setFont(list.getFont());
  89. setBorder((cellHasFocus) ? UIManager.getBorder("List.focusCellHighlightBorder") : noFocusBorder);
  90. return this;
  91. }
  92. /**
  93. * Overridden for performance reasons.
  94. * See the <a href="#override">Implementation Note</a>
  95. * for more information.
  96. */
  97. public void validate() {}
  98. /**
  99. * Overridden for performance reasons.
  100. * See the <a href="#override">Implementation Note</a>
  101. * for more information.
  102. */
  103. public void revalidate() {}
  104. /**
  105. * Overridden for performance reasons.
  106. * See the <a href="#override">Implementation Note</a>
  107. * for more information.
  108. */
  109. public void repaint(long tm, int x, int y, int width, int height) {}
  110. /**
  111. * Overridden for performance reasons.
  112. * See the <a href="#override">Implementation Note</a>
  113. * for more information.
  114. */
  115. public void repaint(Rectangle r) {}
  116. /**
  117. * Overridden for performance reasons.
  118. * See the <a href="#override">Implementation Note</a>
  119. * for more information.
  120. */
  121. protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
  122. // Strings get interned...
  123. if (propertyName=="text")
  124. super.firePropertyChange(propertyName, oldValue, newValue);
  125. }
  126. /**
  127. * Overridden for performance reasons.
  128. * See the <a href="#override">Implementation Note</a>
  129. * for more information.
  130. */
  131. public void firePropertyChange(String propertyName, byte oldValue, byte newValue) {}
  132. /**
  133. * Overridden for performance reasons.
  134. * See the <a href="#override">Implementation Note</a>
  135. * for more information.
  136. */
  137. public void firePropertyChange(String propertyName, char oldValue, char newValue) {}
  138. /**
  139. * Overridden for performance reasons.
  140. * See the <a href="#override">Implementation Note</a>
  141. * for more information.
  142. */
  143. public void firePropertyChange(String propertyName, short oldValue, short newValue) {}
  144. /**
  145. * Overridden for performance reasons.
  146. * See the <a href="#override">Implementation Note</a>
  147. * for more information.
  148. */
  149. public void firePropertyChange(String propertyName, int oldValue, int newValue) {}
  150. /**
  151. * Overridden for performance reasons.
  152. * See the <a href="#override">Implementation Note</a>
  153. * for more information.
  154. */
  155. public void firePropertyChange(String propertyName, long oldValue, long newValue) {}
  156. /**
  157. * Overridden for performance reasons.
  158. * See the <a href="#override">Implementation Note</a>
  159. * for more information.
  160. */
  161. public void firePropertyChange(String propertyName, float oldValue, float newValue) {}
  162. /**
  163. * Overridden for performance reasons.
  164. * See the <a href="#override">Implementation Note</a>
  165. * for more information.
  166. */
  167. public void firePropertyChange(String propertyName, double oldValue, double newValue) {}
  168. /**
  169. * Overridden for performance reasons.
  170. * See the <a href="#override">Implementation Note</a>
  171. * for more information.
  172. */
  173. public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) {}
  174. /**
  175. * A subclass of DefaultListCellRenderer that implements UIResource.
  176. * DefaultListCellRenderer doesn't implement UIResource
  177. * directly so that applications can safely override the
  178. * cellRenderer property with DefaultListCellRenderer subclasses.
  179. * <p>
  180. * <strong>Warning:</strong>
  181. * Serialized objects of this class will not be compatible with
  182. * future Swing releases. The current serialization support is
  183. * appropriate for short term storage or RMI between applications running
  184. * the same version of Swing. As of 1.4, support for long term storage
  185. * of all JavaBeans<sup><font size="-2">TM</font></sup>
  186. * has been added to the <code>java.beans</code> package.
  187. * Please see {@link java.beans.XMLEncoder}.
  188. */
  189. public static class UIResource extends DefaultListCellRenderer
  190. implements javax.swing.plaf.UIResource
  191. {
  192. }
  193. }