79 * will be ignored. 80 * <li>The identity of the value does not matter, only the actual 81 * value. For example, {@code TextAttribute.WEIGHT_BOLD} and 82 * {@code Float.valueOf(2.0f)} 83 * indicate the same {@code WEIGHT}. 84 * <li>Attribute values of type {@code Number} (used for 85 * {@code WEIGHT}, {@code WIDTH}, {@code POSTURE}, 86 * {@code SIZE}, {@code JUSTIFICATION}, and 87 * {@code TRACKING}) can vary along their natural range and are 88 * not restricted to the predefined constants. 89 * {@code Number.floatValue()} is used to get the actual value 90 * from the {@code Number}. 91 * <li>The values for {@code WEIGHT}, {@code WIDTH}, and 92 * {@code POSTURE} are interpolated by the system, which 93 * can select the 'nearest available' font or use other techniques to 94 * approximate the user's request. 95 * 96 * </UL> 97 * 98 * <h4>Summary of attributes</h4> 99 * <table style="float:center;width:95%" border="0" cellspacing="0" cellpadding="2" 100 * summary="Key, value type, principal constants, and default value 101 * behavior of all TextAttributes"> 102 * <tr style="background-color:#ccccff"> 103 * <th valign="TOP" style="text-align:center">Key</th> 104 * <th valign="TOP" style="text-align:center">Value Type</th> 105 * <th valign="TOP" style="text-align:center">Principal Constants</th> 106 * <th valign="TOP" style="text-align:center">Default Value</th> 107 * </tr> 108 * <tr> 109 * <td valign="TOP">{@link #FAMILY}</td> 110 * <td valign="TOP">String</td> 111 * <td valign="TOP">See Font {@link java.awt.Font#DIALOG DIALOG}, 112 * {@link java.awt.Font#DIALOG_INPUT DIALOG_INPUT},<br> {@link java.awt.Font#SERIF SERIF}, 113 * {@link java.awt.Font#SANS_SERIF SANS_SERIF}, and {@link java.awt.Font#MONOSPACED MONOSPACED}. 114 * </td> 115 * <td valign="TOP">"Default" (use platform default)</td> 116 * </tr> 117 * <tr style="background-color:#eeeeff"> 118 * <td valign="TOP">{@link #WEIGHT}</td> 119 * <td valign="TOP">Number</td> 120 * <td valign="TOP">WEIGHT_REGULAR, WEIGHT_BOLD</td> 121 * <td valign="TOP">WEIGHT_REGULAR</td> 122 * </tr> 123 * <tr> 124 * <td valign="TOP">{@link #WIDTH}</td> 125 * <td valign="TOP">Number</td> 126 * <td valign="TOP">WIDTH_CONDENSED, WIDTH_REGULAR,<br>WIDTH_EXTENDED</td> 127 * <td valign="TOP">WIDTH_REGULAR</td> 128 * </tr> 129 * <tr style="background-color:#eeeeff"> 130 * <td valign="TOP">{@link #POSTURE}</td> 131 * <td valign="TOP">Number</td> 132 * <td valign="TOP">POSTURE_REGULAR, POSTURE_OBLIQUE</td> 133 * <td valign="TOP">POSTURE_REGULAR</td> 134 * </tr> 135 * <tr> 136 * <td valign="TOP">{@link #SIZE}</td> 137 * <td valign="TOP">Number</td> 138 * <td valign="TOP">none</td> 139 * <td valign="TOP">12.0</td> 140 * </tr> 141 * <tr style="background-color:#eeeeff"> 142 * <td valign="TOP">{@link #TRANSFORM}</td> 143 * <td valign="TOP">{@link TransformAttribute}</td> 144 * <td valign="TOP">See TransformAttribute {@link TransformAttribute#IDENTITY IDENTITY}</td> 145 * <td valign="TOP">TransformAttribute.IDENTITY</td> 146 * </tr> 147 * <tr> 148 * <td valign="TOP">{@link #SUPERSCRIPT}</td> 149 * <td valign="TOP">Integer</td> 150 * <td valign="TOP">SUPERSCRIPT_SUPER, SUPERSCRIPT_SUB</td> 151 * <td valign="TOP">0 (use the standard glyphs and metrics)</td> 152 * </tr> 153 * <tr style="background-color:#eeeeff"> 154 * <td valign="TOP">{@link #FONT}</td> 155 * <td valign="TOP">{@link java.awt.Font}</td> 156 * <td valign="TOP">none</td> 157 * <td valign="TOP">null (do not override font resolution)</td> 158 * </tr> 159 * <tr> 160 * <td valign="TOP">{@link #CHAR_REPLACEMENT}</td> 161 * <td valign="TOP">{@link GraphicAttribute}</td> 162 * <td valign="TOP">none</td> 163 * <td valign="TOP">null (draw text using font glyphs)</td> 164 * </tr> 165 * <tr style="background-color:#eeeeff"> 166 * <td valign="TOP">{@link #FOREGROUND}</td> 167 * <td valign="TOP">{@link java.awt.Paint}</td> 168 * <td valign="TOP">none</td> 169 * <td valign="TOP">null (use current graphics paint)</td> 170 * </tr> 171 * <tr> 172 * <td valign="TOP">{@link #BACKGROUND}</td> 173 * <td valign="TOP">{@link java.awt.Paint}</td> 174 * <td valign="TOP">none</td> 175 * <td valign="TOP">null (do not render background)</td> 176 * </tr> 177 * <tr style="background-color:#eeeeff"> 178 * <td valign="TOP">{@link #UNDERLINE}</td> 179 * <td valign="TOP">Integer</td> 180 * <td valign="TOP">UNDERLINE_ON</td> 181 * <td valign="TOP">-1 (do not render underline)</td> 182 * </tr> 183 * <tr> 184 * <td valign="TOP">{@link #STRIKETHROUGH}</td> 185 * <td valign="TOP">Boolean</td> 186 * <td valign="TOP">STRIKETHROUGH_ON</td> 187 * <td valign="TOP">false (do not render strikethrough)</td> 188 * </tr> 189 * <tr style="background-color:#eeeeff"> 190 * <td valign="TOP">{@link #RUN_DIRECTION}</td> 191 * <td valign="TOP">Boolean</td> 192 * <td valign="TOP">RUN_DIRECTION_LTR<br>RUN_DIRECTION_RTL</td> 193 * <td valign="TOP">null (use {@link java.text.Bidi} standard default)</td> 194 * </tr> 195 * <tr> 196 * <td valign="TOP">{@link #BIDI_EMBEDDING}</td> 197 * <td valign="TOP">Integer</td> 198 * <td valign="TOP">none</td> 199 * <td valign="TOP">0 (use base line direction)</td> 200 * </tr> 201 * <tr style="background-color:#eeeeff"> 202 * <td valign="TOP">{@link #JUSTIFICATION}</td> 203 * <td valign="TOP">Number</td> 204 * <td valign="TOP">JUSTIFICATION_FULL</td> 205 * <td valign="TOP">JUSTIFICATION_FULL</td> 206 * </tr> 207 * <tr> 208 * <td valign="TOP">{@link #INPUT_METHOD_HIGHLIGHT}</td> 209 * <td valign="TOP">{@link java.awt.im.InputMethodHighlight},<br>{@link java.text.Annotation}</td> 210 * <td valign="TOP">(see class)</td> 211 * <td valign="TOP">null (do not apply input highlighting)</td> 212 * </tr> 213 * <tr style="background-color:#eeeeff"> 214 * <td valign="TOP">{@link #INPUT_METHOD_UNDERLINE}</td> 215 * <td valign="TOP">Integer</td> 216 * <td valign="TOP">UNDERLINE_LOW_ONE_PIXEL,<br>UNDERLINE_LOW_TWO_PIXEL</td> 217 * <td valign="TOP">-1 (do not render underline)</td> 218 * </tr> 219 * <tr> 220 * <td valign="TOP">{@link #SWAP_COLORS}</td> 221 * <td valign="TOP">Boolean</td> 222 * <td valign="TOP">SWAP_COLORS_ON</td> 223 * <td valign="TOP">false (do not swap colors)</td> 224 * </tr> 225 * <tr style="background-color:#eeeeff"> 226 * <td valign="TOP">{@link #NUMERIC_SHAPING}</td> 227 * <td valign="TOP">{@link java.awt.font.NumericShaper}</td> 228 * <td valign="TOP">none</td> 229 * <td valign="TOP">null (do not shape digits)</td> 230 * </tr> 231 * <tr> 232 * <td valign="TOP">{@link #KERNING}</td> 233 * <td valign="TOP">Integer</td> 234 * <td valign="TOP">KERNING_ON</td> 235 * <td valign="TOP">0 (do not request kerning)</td> 236 * </tr> 237 * <tr style="background-color:#eeeeff"> 238 * <td valign="TOP">{@link #LIGATURES}</td> 239 * <td valign="TOP">Integer</td> 240 * <td valign="TOP">LIGATURES_ON</td> 241 * <td valign="TOP">0 (do not form optional ligatures)</td> 242 * </tr> 243 * <tr> 244 * <td valign="TOP">{@link #TRACKING}</td> 245 * <td valign="TOP">Number</td> 246 * <td valign="TOP">TRACKING_LOOSE, TRACKING_TIGHT</td> 247 * <td valign="TOP">0 (do not add tracking)</td> 248 * </tr> 249 * </table> 250 * 251 * @see java.awt.Font 252 * @see java.awt.font.TextLayout 253 * @see java.text.AttributedCharacterIterator 254 */ 255 public final class TextAttribute extends Attribute { 256 257 // table of all instances in this class, used by readResolve 258 private static final Map<String, TextAttribute> 259 instanceMap = new HashMap<String, TextAttribute>(29); 260 261 // For access from java.text.Bidi 262 static { 263 if (SharedSecrets.getJavaAWTFontAccess() == null) { 264 SharedSecrets.setJavaAWTFontAccess(new JavaAWTFontAccessImpl()); 265 } 266 } 267 268 /** | 79 * will be ignored. 80 * <li>The identity of the value does not matter, only the actual 81 * value. For example, {@code TextAttribute.WEIGHT_BOLD} and 82 * {@code Float.valueOf(2.0f)} 83 * indicate the same {@code WEIGHT}. 84 * <li>Attribute values of type {@code Number} (used for 85 * {@code WEIGHT}, {@code WIDTH}, {@code POSTURE}, 86 * {@code SIZE}, {@code JUSTIFICATION}, and 87 * {@code TRACKING}) can vary along their natural range and are 88 * not restricted to the predefined constants. 89 * {@code Number.floatValue()} is used to get the actual value 90 * from the {@code Number}. 91 * <li>The values for {@code WEIGHT}, {@code WIDTH}, and 92 * {@code POSTURE} are interpolated by the system, which 93 * can select the 'nearest available' font or use other techniques to 94 * approximate the user's request. 95 * 96 * </UL> 97 * 98 * <h4>Summary of attributes</h4> 99 * <table style="float:center;width:95%" class="striped"> 100 * <caption>Key, value type, principal constants, and 101 * default value behavior of all TextAttributes</caption> 102 * <thead> 103 * <tr> 104 * <th valign="TOP" style="text-align:center">Key</th> 105 * <th valign="TOP" style="text-align:center">Value Type</th> 106 * <th valign="TOP" style="text-align:center">Principal Constants</th> 107 * <th valign="TOP" style="text-align:center">Default Value</th> 108 * </tr> 109 * </thead> 110 * <tbody> 111 * <tr> 112 * <td valign="TOP">{@link #FAMILY}</td> 113 * <td valign="TOP">String</td> 114 * <td valign="TOP">See Font {@link java.awt.Font#DIALOG DIALOG}, 115 * {@link java.awt.Font#DIALOG_INPUT DIALOG_INPUT},<br> {@link java.awt.Font#SERIF SERIF}, 116 * {@link java.awt.Font#SANS_SERIF SANS_SERIF}, and {@link java.awt.Font#MONOSPACED MONOSPACED}. 117 * </td> 118 * <td valign="TOP">"Default" (use platform default)</td> 119 * </tr> 120 * <tr> 121 * <td valign="TOP">{@link #WEIGHT}</td> 122 * <td valign="TOP">Number</td> 123 * <td valign="TOP">WEIGHT_REGULAR, WEIGHT_BOLD</td> 124 * <td valign="TOP">WEIGHT_REGULAR</td> 125 * </tr> 126 * <tr> 127 * <td valign="TOP">{@link #WIDTH}</td> 128 * <td valign="TOP">Number</td> 129 * <td valign="TOP">WIDTH_CONDENSED, WIDTH_REGULAR,<br>WIDTH_EXTENDED</td> 130 * <td valign="TOP">WIDTH_REGULAR</td> 131 * </tr> 132 * <tr> 133 * <td valign="TOP">{@link #POSTURE}</td> 134 * <td valign="TOP">Number</td> 135 * <td valign="TOP">POSTURE_REGULAR, POSTURE_OBLIQUE</td> 136 * <td valign="TOP">POSTURE_REGULAR</td> 137 * </tr> 138 * <tr> 139 * <td valign="TOP">{@link #SIZE}</td> 140 * <td valign="TOP">Number</td> 141 * <td valign="TOP">none</td> 142 * <td valign="TOP">12.0</td> 143 * </tr> 144 * <tr> 145 * <td valign="TOP">{@link #TRANSFORM}</td> 146 * <td valign="TOP">{@link TransformAttribute}</td> 147 * <td valign="TOP">See TransformAttribute {@link TransformAttribute#IDENTITY IDENTITY}</td> 148 * <td valign="TOP">TransformAttribute.IDENTITY</td> 149 * </tr> 150 * <tr> 151 * <td valign="TOP">{@link #SUPERSCRIPT}</td> 152 * <td valign="TOP">Integer</td> 153 * <td valign="TOP">SUPERSCRIPT_SUPER, SUPERSCRIPT_SUB</td> 154 * <td valign="TOP">0 (use the standard glyphs and metrics)</td> 155 * </tr> 156 * <tr> 157 * <td valign="TOP">{@link #FONT}</td> 158 * <td valign="TOP">{@link java.awt.Font}</td> 159 * <td valign="TOP">none</td> 160 * <td valign="TOP">null (do not override font resolution)</td> 161 * </tr> 162 * <tr> 163 * <td valign="TOP">{@link #CHAR_REPLACEMENT}</td> 164 * <td valign="TOP">{@link GraphicAttribute}</td> 165 * <td valign="TOP">none</td> 166 * <td valign="TOP">null (draw text using font glyphs)</td> 167 * </tr> 168 * <tr> 169 * <td valign="TOP">{@link #FOREGROUND}</td> 170 * <td valign="TOP">{@link java.awt.Paint}</td> 171 * <td valign="TOP">none</td> 172 * <td valign="TOP">null (use current graphics paint)</td> 173 * </tr> 174 * <tr> 175 * <td valign="TOP">{@link #BACKGROUND}</td> 176 * <td valign="TOP">{@link java.awt.Paint}</td> 177 * <td valign="TOP">none</td> 178 * <td valign="TOP">null (do not render background)</td> 179 * </tr> 180 * <tr> 181 * <td valign="TOP">{@link #UNDERLINE}</td> 182 * <td valign="TOP">Integer</td> 183 * <td valign="TOP">UNDERLINE_ON</td> 184 * <td valign="TOP">-1 (do not render underline)</td> 185 * </tr> 186 * <tr> 187 * <td valign="TOP">{@link #STRIKETHROUGH}</td> 188 * <td valign="TOP">Boolean</td> 189 * <td valign="TOP">STRIKETHROUGH_ON</td> 190 * <td valign="TOP">false (do not render strikethrough)</td> 191 * </tr> 192 * <tr> 193 * <td valign="TOP">{@link #RUN_DIRECTION}</td> 194 * <td valign="TOP">Boolean</td> 195 * <td valign="TOP">RUN_DIRECTION_LTR<br>RUN_DIRECTION_RTL</td> 196 * <td valign="TOP">null (use {@link java.text.Bidi} standard default)</td> 197 * </tr> 198 * <tr> 199 * <td valign="TOP">{@link #BIDI_EMBEDDING}</td> 200 * <td valign="TOP">Integer</td> 201 * <td valign="TOP">none</td> 202 * <td valign="TOP">0 (use base line direction)</td> 203 * </tr> 204 * <tr> 205 * <td valign="TOP">{@link #JUSTIFICATION}</td> 206 * <td valign="TOP">Number</td> 207 * <td valign="TOP">JUSTIFICATION_FULL</td> 208 * <td valign="TOP">JUSTIFICATION_FULL</td> 209 * </tr> 210 * <tr> 211 * <td valign="TOP">{@link #INPUT_METHOD_HIGHLIGHT}</td> 212 * <td valign="TOP">{@link java.awt.im.InputMethodHighlight},<br>{@link java.text.Annotation}</td> 213 * <td valign="TOP">(see class)</td> 214 * <td valign="TOP">null (do not apply input highlighting)</td> 215 * </tr> 216 * <tr> 217 * <td valign="TOP">{@link #INPUT_METHOD_UNDERLINE}</td> 218 * <td valign="TOP">Integer</td> 219 * <td valign="TOP">UNDERLINE_LOW_ONE_PIXEL,<br>UNDERLINE_LOW_TWO_PIXEL</td> 220 * <td valign="TOP">-1 (do not render underline)</td> 221 * </tr> 222 * <tr> 223 * <td valign="TOP">{@link #SWAP_COLORS}</td> 224 * <td valign="TOP">Boolean</td> 225 * <td valign="TOP">SWAP_COLORS_ON</td> 226 * <td valign="TOP">false (do not swap colors)</td> 227 * </tr> 228 * <tr> 229 * <td valign="TOP">{@link #NUMERIC_SHAPING}</td> 230 * <td valign="TOP">{@link java.awt.font.NumericShaper}</td> 231 * <td valign="TOP">none</td> 232 * <td valign="TOP">null (do not shape digits)</td> 233 * </tr> 234 * <tr> 235 * <td valign="TOP">{@link #KERNING}</td> 236 * <td valign="TOP">Integer</td> 237 * <td valign="TOP">KERNING_ON</td> 238 * <td valign="TOP">0 (do not request kerning)</td> 239 * </tr> 240 * <tr> 241 * <td valign="TOP">{@link #LIGATURES}</td> 242 * <td valign="TOP">Integer</td> 243 * <td valign="TOP">LIGATURES_ON</td> 244 * <td valign="TOP">0 (do not form optional ligatures)</td> 245 * </tr> 246 * <tr> 247 * <td valign="TOP">{@link #TRACKING}</td> 248 * <td valign="TOP">Number</td> 249 * <td valign="TOP">TRACKING_LOOSE, TRACKING_TIGHT</td> 250 * <td valign="TOP">0 (do not add tracking)</td> 251 * </tr> 252 * </tbody> 253 * </table> 254 * 255 * @see java.awt.Font 256 * @see java.awt.font.TextLayout 257 * @see java.text.AttributedCharacterIterator 258 */ 259 public final class TextAttribute extends Attribute { 260 261 // table of all instances in this class, used by readResolve 262 private static final Map<String, TextAttribute> 263 instanceMap = new HashMap<String, TextAttribute>(29); 264 265 // For access from java.text.Bidi 266 static { 267 if (SharedSecrets.getJavaAWTFontAccess() == null) { 268 SharedSecrets.setJavaAWTFontAccess(new JavaAWTFontAccessImpl()); 269 } 270 } 271 272 /** |