001/* 002 * $Id: AbstractRenderer.java 3927 2011-02-22 16:34:11Z kleopatra $ 003 * 004 * Copyright 2007 Sun Microsystems, Inc., 4150 Network Circle, 005 * Santa Clara, California 95054, U.S.A. All rights reserved. 006 * 007 * This library is free software; you can redistribute it and/or 008 * modify it under the terms of the GNU Lesser General Public 009 * License as published by the Free Software Foundation; either 010 * version 2.1 of the License, or (at your option) any later version. 011 * 012 * This library is distributed in the hope that it will be useful, 013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 015 * Lesser General Public License for more details. 016 * 017 * You should have received a copy of the GNU Lesser General Public 018 * License along with this library; if not, write to the Free Software 019 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 020 */ 021package org.jdesktop.swingx.renderer; 022 023import java.awt.Color; 024import java.io.Serializable; 025 026import org.jdesktop.swingx.plaf.UIDependent; 027import org.jdesktop.swingx.rollover.RolloverRenderer; 028 029/** 030 * Convenience common ancestor for SwingX renderers. Concrete subclasses 031 * should 032 * 033 * <ul> 034 * <li> provide a bunch of convenience constructors as appropriate for the type of 035 * collection component 036 * <li> create a reasonable default ComponentProvider if none is given 037 * <li> implement the getXXCellRenderer by delegating to the ComponentProvider 038 * </ul> 039 * 040 * @author Jeanette Winzenburg 041 */ 042public abstract class AbstractRenderer 043 implements RolloverRenderer, StringValue, Serializable, UIDependent { 044 045 protected ComponentProvider<?> componentController; 046 047 public AbstractRenderer(ComponentProvider<?> provider) { 048 if (provider == null) { 049 provider = createDefaultComponentProvider(); 050 } 051 this.componentController = provider; 052 } 053 054 /** 055 * Returns the ComponentProvider used by this renderer. 056 * 057 * @return the ComponentProvider used by this renderer 058 */ 059 public ComponentProvider<?> getComponentProvider() { 060 return componentController; 061 } 062 063 /** 064 * The default ComponentProvider to use if no special. 065 * 066 * @return the default <code>ComponentProvider</code> 067 */ 068 protected abstract ComponentProvider<?> createDefaultComponentProvider(); 069 070// --------------- implement StringValue 071 072 /** 073 * {@inheritDoc} 074 */ 075 @Override 076 public String getString(Object value) { 077 return componentController.getString(value); 078 } 079 080 // ------------ implement RolloverRenderer 081 082 /** 083 * {@inheritDoc} 084 */ 085 @Override 086 public void doClick() { 087 if (isEnabled()) { 088 ((RolloverRenderer) componentController).doClick(); 089 } 090 } 091 092 /** 093 * {@inheritDoc} 094 */ 095 @Override 096 public boolean isEnabled() { 097 return (componentController instanceof RolloverRenderer) 098 && ((RolloverRenderer) componentController).isEnabled(); 099 } 100 101 /** 102 * {@inheritDoc} 103 */ 104 @Override 105 public void updateUI() { 106 componentController.updateUI(); 107 } 108 109//-------------------- legacy: configure arbitrary visuals 110 /** 111 * @param background 112 */ 113 public void setBackground(Color background) { 114 componentController.getDefaultVisuals().setBackground(background); 115 116 } 117 118 /** 119 * @param foreground 120 */ 121 public void setForeground(Color foreground) { 122 componentController.getDefaultVisuals().setForeground(foreground); 123 } 124 125 126}