001 package com.croftsoft.core.gui.table;
002
003 import java.awt.*;
004 import javax.swing.*;
005 import javax.swing.table.*;
006
007 /*********************************************************************
008 * Displays every other JTable row in a different color for contrast.
009 *
010 * <p>
011 * Example:
012 * <pre>
013 * jTable.setDefaultRenderer (
014 * Object.class,
015 * new AlternatingRenderer (
016 * Color.black,
017 * new Color ( 204, 255, 204 ),
018 * Color.black,
019 * new Color ( 230, 230, 190 ),
020 * Color.black,
021 * Color.white ) );
022 * </pre>
023 * </p>
024 *
025 * <p>
026 * <b>Reference</b><br />
027 * John Zukowski,
028 * <a target="_blank" href=
029 * "http://www.amazon.com/exec/obidos/ASIN/189311578X/croftsoft-20">
030 * Definitive Guide to Swing for Java 2, Second Edition</a>,
031 * 2000, Chapter 17, p715.
032 * </p>
033 *
034 * @version
035 * 2001-08-16
036 * @since
037 * 2001-08-16
038 * @author
039 * <a href="https://www.croftsoft.com/">David Wallace Croft</a>
040 *********************************************************************/
041
042 public final class AlternatingRenderer
043 implements TableCellRenderer
044 //////////////////////////////////////////////////////////////////////
045 //////////////////////////////////////////////////////////////////////
046 {
047
048 private final Color selectedForegroundColor;
049
050 private final Color selectedBackgroundColor;
051
052 private final Color oddForegroundColor;
053
054 private final Color oddBackgroundColor;
055
056 private final Color evenForegroundColor;
057
058 private final Color evenBackgroundColor;
059
060 //
061
062 private final DefaultTableCellRenderer defaultTableCellRenderer;
063
064 //////////////////////////////////////////////////////////////////////
065 //////////////////////////////////////////////////////////////////////
066
067 /*********************************************************************
068 * If a Color argument is null, the default Color will be used.
069 *********************************************************************/
070 public AlternatingRenderer (
071 Color selectedForegroundColor,
072 Color selectedBackgroundColor,
073 Color oddForegroundColor,
074 Color oddBackgroundColor,
075 Color evenForegroundColor,
076 Color evenBackgroundColor )
077 //////////////////////////////////////////////////////////////////////
078 {
079 this.selectedForegroundColor = selectedForegroundColor;
080
081 this.selectedBackgroundColor = selectedBackgroundColor;
082
083 this.oddForegroundColor = oddForegroundColor;
084
085 this.oddBackgroundColor = oddBackgroundColor;
086
087 this.evenForegroundColor = evenForegroundColor;
088
089 this.evenBackgroundColor = evenBackgroundColor;
090
091 //
092
093 defaultTableCellRenderer = new DefaultTableCellRenderer ( );
094 }
095
096 //////////////////////////////////////////////////////////////////////
097 //////////////////////////////////////////////////////////////////////
098
099 public Component getTableCellRendererComponent (
100 JTable jTable,
101 Object value,
102 boolean isSelected,
103 boolean hasFocus,
104 int row,
105 int column )
106 //////////////////////////////////////////////////////////////////////
107 {
108 Component component
109 = defaultTableCellRenderer.getTableCellRendererComponent (
110 jTable,
111 value,
112 isSelected,
113 hasFocus,
114 row,
115 column );
116
117 ( ( JLabel ) component ).setOpaque ( true );
118
119 Color foregroundColor;
120
121 Color backgroundColor;
122
123 if ( isSelected )
124 {
125 foregroundColor = selectedForegroundColor;
126
127 backgroundColor = selectedBackgroundColor;
128 }
129 else
130 {
131 if ( row % 2 == 0 )
132 {
133 foregroundColor = evenForegroundColor;
134
135 backgroundColor = evenBackgroundColor;
136 }
137 else
138 {
139 foregroundColor = oddForegroundColor;
140
141 backgroundColor = oddBackgroundColor;
142 }
143 }
144
145 if ( foregroundColor != null )
146 {
147 component.setForeground ( foregroundColor );
148 }
149
150 if ( backgroundColor != null )
151 {
152 component.setBackground ( backgroundColor );
153 }
154
155 return component;
156 }
157
158 //////////////////////////////////////////////////////////////////////
159 //////////////////////////////////////////////////////////////////////
160 }