001    /*
002     * $Id: LabelProvider.java 3100 2008-10-14 22:33:10Z rah003 $
003     *
004     * Copyright 2006 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    package org.jdesktop.swingx.renderer;
022    
023    import javax.swing.JLabel;
024    
025    /**
026     * A component provider which uses a <code>JLabel</code> as rendering
027     * component. <p>
028     * 
029     * It configures the Label's text and icon property from the  
030     * StringValue.
031     * 
032     * @author Jeanette Winzenburg
033     * 
034     * @see StringValue
035     * @see FormatStringValue
036     * @see IconValue
037     */
038    public class LabelProvider extends ComponentProvider<JLabel> {
039    
040        /**
041         * Instantiates a LabelProvider with default to-String converter and LEADING
042         * horizontal alignment .
043         * <p>
044         * 
045         */
046        public LabelProvider() {
047            this(null);
048        }
049        
050        /**
051         * Instantiates a LabelProvider with the given to-String converter and LEADING
052         * horizontal alignment. If the converter is null, the default TO_STRING is
053         * used.
054         * <p>
055         * 
056         * @param converter the converter to use for mapping the cell value to a
057         *        String representation.
058         */
059        public LabelProvider(StringValue converter) {
060            this(converter, JLabel.LEADING);
061        }
062    
063        /**
064         * Instantiates a LabelProvider with default to-String converter and given
065         * horizontal alignment. 
066         * 
067         * @param alignment the horizontal alignment.
068         */
069        public LabelProvider(int alignment) {
070            this(null, alignment);
071        }
072    
073        /**
074         * Instantiates a LabelProvider with given to-String converter and given
075         * horizontal alignment. If the converter is null, the default TO_STRING is
076         * used.
077         * 
078         * @param converter the converter to use for mapping the cell value to a
079         *        String representation.
080         * @param alignment the horizontal alignment.
081         */
082        public LabelProvider(StringValue converter, int alignment) {
083            super(converter, alignment);
084        }
085    
086        /**
087         * {@inheritDoc}
088         */
089        @Override
090        protected JLabel createRendererComponent() {
091            return new JRendererLabel();
092        }
093    
094        /**
095         * {@inheritDoc}
096         * Here: sets the Label's horizontal alignment to the alignment as configured 
097         * in the controller.
098         */
099        @Override
100        protected void configureState(CellContext context) {
101           rendererComponent.setHorizontalAlignment(getHorizontalAlignment());
102        }
103    
104        /**
105         * {@inheritDoc}
106         * Here: sets the labels's text and icon property to the value as 
107         * returned by getValueAsString/Icon, respectively.
108         * 
109         * @param context the cellContext to use
110         * 
111         * @see #getValueAsString(CellContext)
112         * @see #getValueAsIcon(CellContext) 
113         */
114        @Override
115        protected void format(CellContext context) {
116            rendererComponent.setIcon(getValueAsIcon(context));
117            rendererComponent.setText(getValueAsString(context));
118        }
119    
120        
121    }