001 /*
002 * $Id: TableCellRenderers.java,v 1.6 2005/10/13 08:59:56 kleopatra Exp $
003 *
004 * Copyright 2004 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 */
021
022 package org.jdesktop.swingx.table;
023
024 import java.util.Date;
025 import java.util.HashMap;
026
027 import javax.swing.Icon;
028 import javax.swing.table.DefaultTableCellRenderer;
029 import javax.swing.table.TableCellRenderer;
030
031 import org.jdesktop.swingx.LinkModel;
032
033 public class TableCellRenderers {
034
035 private static HashMap typeMap;
036
037 static {
038 // load the handler map with classes designed to handle the
039 // type-specific rendering
040 typeMap = new HashMap();
041 typeMap.put(Number.class,
042 "org.jdesktop.swingx.JXTable$NumberRenderer");
043 typeMap.put(Double.class,
044 "org.jdesktop.swingx.JXTable$DoubleRenderer");
045 typeMap.put(Float.class,
046 "org.jdesktop.swingx.JXTable$DoubleRenderer");
047 typeMap.put(Date.class,
048 "org.jdesktop.swingx.JXTable$DateRenderer");
049 typeMap.put(Icon.class,
050 "org.jdesktop.swingx.JXTable$IconRenderer");
051 typeMap.put(Boolean.class,
052 "org.jdesktop.swingx.JXTable$BooleanRenderer");
053 typeMap.put(LinkModel.class,
054 "org.jdesktop.swingx.LinkRenderer");
055
056 }
057
058 private static String getRendererClassName(Class columnClass) {
059 String rendererClassName = (String) typeMap.get(columnClass);
060 return rendererClassName != null ? rendererClassName :
061 "javax.swing.table.DefaultTableCellRenderer";
062 }
063
064 /**
065 * @see #getNewDefaultRenderer
066 * @param columnClass Class of value being rendered
067 * @param rendererClassName String containing the class name of the renderer which
068 * should be returned for the specified column class
069 */
070 public static void setDefaultRenderer(Class columnClass, String rendererClassName) {
071 typeMap.put(columnClass, rendererClassName);
072 }
073
074 /**
075 * Returns a new instance of the default renderer for the specified class.
076 * This differs from JTable:getDefaultRenderer() in that it returns a new
077 * instance each time so that the renderer may be set and customized for
078 * a particular column.
079 *
080 * @param columnClass Class of value being rendered
081 * @return TableCellRenderer instance which renders values of the specified type
082 */
083 public static TableCellRenderer getNewDefaultRenderer(Class columnClass) {
084 TableCellRenderer renderer = null;
085 String rendererClassName = getRendererClassName(columnClass);
086 try {
087 Class rendererClass = Class.forName(rendererClassName);
088 renderer = (TableCellRenderer) rendererClass.newInstance();
089 }
090 catch (Exception e) {
091 renderer = new DefaultTableCellRenderer();
092 }
093 return renderer;
094 }
095
096 TableCellRenderers() {
097 }
098
099 }