001    /*
002     * Copyright 2002-2004 the original author or authors.
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005     * use this file except in compliance with the License. You may obtain a copy of
006     * the License at
007     * 
008     * http://www.apache.org/licenses/LICENSE-2.0
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013     * License for the specific language governing permissions and limitations under
014     * the License.
015     */
016    package org.springframework.richclient.table.renderer;
017    
018    import java.awt.Color;
019    import java.awt.Component;
020    import java.awt.Graphics;
021    
022    import javax.swing.JTable;
023    import javax.swing.UIManager;
024    import javax.swing.border.Border;
025    import javax.swing.table.DefaultTableCellRenderer;
026    
027    /**
028     * A table cell renderer that has been optimized for performance
029     * 
030     * @author Keith Donald
031     * <p>
032     * XXX: please describe what is being optimized here and how it should be used.
033     * 
034     * @deprecated OptimizedTableCellRenderer messes up cell rendering see
035     *             {@linkplain http://opensource.atlassian.com/projects/spring/browse/RCP-354}
036     * 
037     */
038    public class OptimizedTableCellRenderer extends DefaultTableCellRenderer {
039        protected Border focusBorder = UIManager.getBorder("Table.focusCellHighlightBorder");
040    
041        protected Color background = UIManager.getColor("Table.focusCellBackground");
042    
043        protected Color foreground = UIManager.getColor("Table.focusCellForeground");
044    
045        protected Color editableForeground;
046    
047        protected Color editableBackground;
048    
049        protected void doPrepareRenderer(JTable table, boolean isSelected, boolean hasFocus, int row, int column) {
050            if (isSelected) {
051                setForeground(table.getSelectionForeground());
052                setBackground(table.getSelectionBackground());
053            }
054            else {
055                setForeground(table.getForeground());
056                setBackground(table.getBackground());
057            }
058            setFont(table.getFont());
059            if (hasFocus) {
060                setBorder( UIManager.getBorder("Table.focusCellHighlightBorder") );
061                if (table.isCellEditable(row, column)) {
062                    super.setForeground( UIManager.getColor("Table.focusCellForeground") );
063                    super.setBackground( UIManager.getColor("Table.focusCellBackground") );
064                }
065            } else {
066                setBorder(noFocusBorder);
067            }
068        }
069    
070        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
071                int row, int column) {
072            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
073    //        doPrepareRenderer(table, isSelected, hasFocus, row, column);
074            setValue(value);
075            return this;
076        }
077    
078        protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
079            // As long as you don't have any HTML text, this override is ok.
080        }
081    
082        // This override is only appropriate if this will never contain any
083        // children AND the Graphics is not clobbered during painting.
084        public void paint(Graphics g) {
085            ui.update(g, this);
086        }
087    
088        public void setBackground(Color c) {
089            this.background = c;
090        }
091    
092        public Color getBackground() {
093            return background;
094        }
095    
096        public void setForeground(Color c) {
097            this.foreground = c;
098        }
099    
100        public Color getForeground() {
101            return foreground;
102        }
103    
104        public boolean isOpaque() {
105            return (background != null);
106        }
107    
108        // This is generally ok for non-Composite components (like Labels)
109        public void invalidate() {
110    
111        }
112    
113        // Can be ignored, we don't exist in the containment hierarchy.
114        public void repaint() {
115    
116        }
117    }