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    }