001 /* 002 * $Id: LabelProperties.java 2951 2008-06-17 10:07:49Z kleopatra $ 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.awt.Color; 025 import java.awt.Font; 026 import java.beans.PropertyChangeEvent; 027 import java.beans.PropertyChangeListener; 028 029 import javax.swing.AbstractButton; 030 import javax.swing.Icon; 031 import javax.swing.JLabel; 032 import javax.swing.table.TableCellRenderer; 033 034 /** 035 * Class used to store label properties in a single object so that they 036 * may be applied as a set on renderers. <p> 037 * 038 * NOTE JW: no longer used except in ColumnHeaderRenderer which is EOL (will be 039 * removed once we switch over to jdk16). So probably will be removed as well. 040 * 041 * @author Amy Fowler 042 * @version 1.0 043 */ 044 045 public class LabelProperties extends JLabel { 046 private static final int BACKGROUND_SET = 1; 047 private static final int FOREGROUND_SET = 2; 048 private static final int FONT_SET = 4; 049 private static final int HORIZONTAL_ALIGNMENT_SET = 8; 050 private static final int HORIZONTAL_TEXT_POSITION_SET = 16; 051 private static final int ICON_SET = 32; 052 private static final int ICON_TEXT_GAP_SET = 64; 053 private static final int TEXT_SET = 128; 054 private static final int VERTICAL_ALIGNMENT_SET = 256; 055 private static final int VERTICAL_TEXT_POSITION_SET = 512; 056 057 private int setFlags = 0; 058 059 public LabelProperties() { 060 super(); 061 addPropertyChangeListener(new PropertyChangeListener() { 062 public void propertyChange(PropertyChangeEvent e) { 063 String propertyName = e.getPropertyName(); 064 Object value = e.getNewValue(); 065 if (propertyName.equals("background")) { 066 if (value != null) { 067 setFlags |= BACKGROUND_SET; 068 } else { 069 setFlags &= (~BACKGROUND_SET); 070 } 071 } 072 else if (propertyName.equals("font")) { 073 if (value != null) { 074 setFlags |= FONT_SET; 075 } else { 076 setFlags &= (~FONT_SET); 077 } 078 } 079 else if (propertyName.equals("foreground")) { 080 if (value != null) { 081 setFlags |= FOREGROUND_SET; 082 } else { 083 setFlags &= (~FOREGROUND_SET); 084 } 085 } 086 else if (propertyName.equals("horizontalAlignment")) { 087 if (value != null && ((Integer)value).intValue() != -1) { 088 setFlags |= HORIZONTAL_ALIGNMENT_SET; 089 } else { 090 setFlags &= (~HORIZONTAL_ALIGNMENT_SET); 091 } 092 } 093 else if (propertyName.equals("horizontalTextPosition")) { 094 if (value != null && ((Integer)value).intValue() != -1) { 095 setFlags |= HORIZONTAL_TEXT_POSITION_SET; 096 } else { 097 setFlags &= (~HORIZONTAL_TEXT_POSITION_SET); 098 } 099 } 100 else if (propertyName.equals("icon")) { 101 if (value != null) { 102 setFlags |= ICON_SET; 103 } else { 104 setFlags &= (~ICON_SET); 105 } 106 } 107 else if (propertyName.equals("iconTextGap")) { 108 if (value != null && ((Integer)value).intValue() != -1) { 109 setFlags |= ICON_TEXT_GAP_SET; 110 } else { 111 setFlags &= (~ICON_TEXT_GAP_SET); 112 } 113 } 114 else if (propertyName.equals("text")) { 115 if (value != null) { 116 setFlags |= TEXT_SET; 117 } else { 118 setFlags &= (~TEXT_SET); 119 } 120 } 121 else if (propertyName.equals("verticalAlignment")) { 122 if (value != null && ((Integer)value).intValue() != -1) { 123 setFlags |= VERTICAL_ALIGNMENT_SET; 124 } else { 125 setFlags &= (~VERTICAL_ALIGNMENT_SET); 126 } 127 } 128 else if (propertyName.equals("verticalTextPosition")) { 129 if (value != null && ((Integer)value).intValue() != -1) { 130 setFlags |= VERTICAL_TEXT_POSITION_SET; 131 } else { 132 setFlags &= (~VERTICAL_TEXT_POSITION_SET); 133 } 134 } 135 } 136 }); 137 } 138 139 public LabelProperties(Color background, Color foreground, Font font, 140 int horizontalAlignment, int horizontalTextPosition, 141 int verticalAlignment, int verticalTextPosition, 142 Icon icon, int iconTextGap, String text) { 143 this(); 144 setBackground(background); 145 setForeground(foreground); 146 setFont(font); 147 setHorizontalAlignment(horizontalAlignment); 148 setHorizontalTextPosition(horizontalTextPosition); 149 setVerticalAlignment(verticalAlignment); 150 setVerticalTextPosition(verticalTextPosition); 151 setIcon(icon); 152 setIconTextGap(iconTextGap); 153 setText(text); 154 } 155 156 @Override 157 public boolean isBackgroundSet() { 158 return (setFlags & BACKGROUND_SET) > 0; 159 } 160 161 @Override 162 public boolean isForegroundSet() { 163 return (setFlags & FOREGROUND_SET) > 0; 164 } 165 166 @Override 167 public boolean isFontSet() { 168 return (setFlags & FONT_SET) > 0; 169 } 170 171 public boolean isHorizontalAlignmentSet() { 172 return (setFlags & HORIZONTAL_ALIGNMENT_SET) > 0; 173 } 174 175 public boolean isHorizontalTextPositionSet() { 176 return (setFlags & HORIZONTAL_TEXT_POSITION_SET) > 0; 177 } 178 179 public boolean isIconSet() { 180 return (setFlags & ICON_SET) > 0; 181 } 182 183 public boolean isIconTextGapSet() { 184 return (setFlags & ICON_TEXT_GAP_SET) > 0; 185 } 186 187 public boolean isTextSet() { 188 return (setFlags & TEXT_SET) > 0; 189 } 190 191 public boolean isVerticalAlignmentSet() { 192 return (setFlags & VERTICAL_ALIGNMENT_SET) > 0; 193 } 194 195 public boolean isVerticalTextPositionSet() { 196 return (setFlags & VERTICAL_TEXT_POSITION_SET) > 0; 197 } 198 199 public boolean noPropertiesSet() { 200 return setFlags == 0; 201 } 202 203 public void applyPropertiesTo(JLabel label) { 204 if (noPropertiesSet()) { 205 return; 206 } 207 if (isBackgroundSet()) { 208 label.setBackground(getBackground()); 209 } 210 if (isForegroundSet()) { 211 label.setForeground(getForeground()); 212 } 213 if (isFontSet()) { 214 label.setFont(getFont()); 215 } 216 if (isHorizontalAlignmentSet()) { 217 label.setHorizontalAlignment(getHorizontalAlignment()); 218 } 219 if (isHorizontalTextPositionSet()) { 220 label.setHorizontalTextPosition(getHorizontalTextPosition()); 221 } 222 if (isIconSet()) { 223 label.setIcon(getIcon()); 224 } 225 if (isIconTextGapSet()) { 226 label.setIconTextGap(getIconTextGap()); 227 } 228 if (isTextSet()) { 229 label.setText(getText()); 230 } 231 if (isVerticalAlignmentSet()) { 232 label.setVerticalAlignment(getVerticalAlignment()); 233 } 234 if (isVerticalTextPositionSet()) { 235 label.setVerticalTextPosition(getVerticalTextPosition()); 236 } 237 } 238 239 public void applyPropertiesTo(AbstractButton button) { 240 if (noPropertiesSet()) { 241 return; 242 } 243 if (isBackgroundSet()) { 244 button.setBackground(getBackground()); 245 } 246 if (isForegroundSet()) { 247 button.setForeground(getForeground()); 248 } 249 if (isFontSet()) { 250 button.setFont(getFont()); 251 } 252 if (isHorizontalAlignmentSet()) { 253 button.setHorizontalAlignment(getHorizontalAlignment()); 254 } 255 if (isHorizontalTextPositionSet()) { 256 button.setHorizontalTextPosition(getHorizontalTextPosition()); 257 } 258 if (isIconSet()) { 259 button.setIcon(getIcon()); 260 } 261 if (isIconTextGapSet()) { 262 button.setIconTextGap(getIconTextGap()); 263 } 264 if (isTextSet()) { 265 button.setText(getText()); 266 } 267 if (isVerticalAlignmentSet()) { 268 button.setVerticalAlignment(getVerticalAlignment()); 269 } 270 if (isVerticalTextPositionSet()) { 271 button.setVerticalTextPosition(getVerticalTextPosition()); 272 } 273 } 274 275 public void applyPropertiesTo(LabelProperties props) { 276 if (noPropertiesSet()) { 277 return; 278 } 279 if (isBackgroundSet()) { 280 props.setBackground(getBackground()); 281 } 282 if (isForegroundSet()) { 283 props.setForeground(getForeground()); 284 } 285 if (isFontSet()) { 286 props.setFont(getFont()); 287 } 288 if (isHorizontalAlignmentSet()) { 289 props.setHorizontalAlignment(getHorizontalAlignment()); 290 } 291 if (isHorizontalTextPositionSet()) { 292 props.setHorizontalTextPosition(getHorizontalTextPosition()); 293 } 294 if (isIconSet()) { 295 props.setIcon(getIcon()); 296 } 297 if (isIconTextGapSet()) { 298 props.setIconTextGap(getIconTextGap()); 299 } 300 if (isTextSet()) { 301 props.setText(getText()); 302 } 303 if (isVerticalAlignmentSet()) { 304 props.setVerticalAlignment(getVerticalAlignment()); 305 } 306 if (isVerticalTextPositionSet()) { 307 props.setVerticalTextPosition(getVerticalTextPosition()); 308 } 309 } 310 311 public void applyPropertiesTo(TableCellRenderer renderer) { 312 if (renderer instanceof JLabel) { 313 applyPropertiesTo( (JLabel) renderer); 314 } 315 else if (renderer instanceof AbstractButton) { 316 applyPropertiesTo( (AbstractButton) renderer); 317 } 318 } 319 }