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 } | 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 * 100 * <table style="width:95%;margin: 0px auto" class="striped"> 101 * <caption>Key, value type, principal constants, and default value behavior of 102 * all TextAttributes</caption> 103 * <thead> 104 * <tr> 105 * <th scope="col">Key 106 * <th scope="col">Value Type 107 * <th scope="col">Principal Constants 108 * <th scope="col">Default Value 109 * </thead> 110 * <tbody> 111 * <tr> 112 * <th scope="row">{@link #FAMILY} 113 * <td>String 114 * <td>See Font {@link java.awt.Font#DIALOG DIALOG}, 115 * {@link java.awt.Font#DIALOG_INPUT DIALOG_INPUT}, 116 * <br> 117 * {@link java.awt.Font#SERIF SERIF}, 118 * {@link java.awt.Font#SANS_SERIF SANS_SERIF}, and 119 * {@link java.awt.Font#MONOSPACED MONOSPACED}. 120 * <td>"Default" (use platform default) 121 * <tr> 122 * <th scope="row">{@link #WEIGHT} 123 * <td>Number 124 * <td>WEIGHT_REGULAR, WEIGHT_BOLD 125 * <td>WEIGHT_REGULAR 126 * <tr> 127 * <th scope="row">{@link #WIDTH} 128 * <td>Number 129 * <td>WIDTH_CONDENSED, WIDTH_REGULAR,<br>WIDTH_EXTENDED 130 * <td>WIDTH_REGULAR 131 * <tr> 132 * <th scope="row">{@link #POSTURE} 133 * <td>Number 134 * <td>POSTURE_REGULAR, POSTURE_OBLIQUE 135 * <td>POSTURE_REGULAR 136 * <tr> 137 * <th scope="row">{@link #SIZE} 138 * <td>Number 139 * <td>none 140 * <td>12.0 141 * <tr> 142 * <th scope="row">{@link #TRANSFORM} 143 * <td>{@link TransformAttribute} 144 * <td>See TransformAttribute {@link TransformAttribute#IDENTITY IDENTITY} 145 * <td>TransformAttribute.IDENTITY 146 * <tr> 147 * <th scope="row">{@link #SUPERSCRIPT} 148 * <td>Integer 149 * <td>SUPERSCRIPT_SUPER, SUPERSCRIPT_SUB 150 * <td>0 (use the standard glyphs and metrics) 151 * <tr> 152 * <th scope="row">{@link #FONT} 153 * <td>{@link java.awt.Font} 154 * <td>none 155 * <td>null (do not override font resolution) 156 * <tr> 157 * <th scope="row">{@link #CHAR_REPLACEMENT} 158 * <td>{@link GraphicAttribute} 159 * <td>none 160 * <td>null (draw text using font glyphs) 161 * <tr> 162 * <th scope="row">{@link #FOREGROUND} 163 * <td>{@link java.awt.Paint} 164 * <td>none 165 * <td>null (use current graphics paint) 166 * <tr> 167 * <th scope="row">{@link #BACKGROUND} 168 * <td>{@link java.awt.Paint} 169 * <td>none 170 * <td>null (do not render background) 171 * <tr> 172 * <th scope="row">{@link #UNDERLINE} 173 * <td>Integer 174 * <td>UNDERLINE_ON 175 * <td>-1 (do not render underline) 176 * <tr> 177 * <th scope="row">{@link #STRIKETHROUGH} 178 * <td>Boolean 179 * <td>STRIKETHROUGH_ON 180 * <td>false (do not render strikethrough) 181 * <tr> 182 * <th scope="row">{@link #RUN_DIRECTION} 183 * <td>Boolean 184 * <td>RUN_DIRECTION_LTR<br>RUN_DIRECTION_RTL 185 * <td>null (use {@link java.text.Bidi} standard default) 186 * <tr> 187 * <th scope="row">{@link #BIDI_EMBEDDING} 188 * <td>Integer 189 * <td>none 190 * <td>0 (use base line direction) 191 * <tr> 192 * <th scope="row">{@link #JUSTIFICATION} 193 * <td>Number 194 * <td>JUSTIFICATION_FULL 195 * <td>JUSTIFICATION_FULL 196 * <tr> 197 * <th scope="row">{@link #INPUT_METHOD_HIGHLIGHT} 198 * <td>{@link java.awt.im.InputMethodHighlight}, 199 * <br> 200 * {@link java.text.Annotation} 201 * <td>(see class) 202 * <td>null (do not apply input highlighting) 203 * <tr> 204 * <th scope="row">{@link #INPUT_METHOD_UNDERLINE} 205 * <td>Integer 206 * <td>UNDERLINE_LOW_ONE_PIXEL,<br>UNDERLINE_LOW_TWO_PIXEL 207 * <td>-1 (do not render underline) 208 * <tr> 209 * <th scope="row">{@link #SWAP_COLORS} 210 * <td>Boolean 211 * <td>SWAP_COLORS_ON 212 * <td>false (do not swap colors) 213 * <tr> 214 * <th scope="row">{@link #NUMERIC_SHAPING} 215 * <td>{@link java.awt.font.NumericShaper} 216 * <td>none 217 * <td>null (do not shape digits) 218 * <tr> 219 * <th scope="row">{@link #KERNING} 220 * <td>Integer 221 * <td>KERNING_ON 222 * <td>0 (do not request kerning) 223 * <tr> 224 * <th scope="row">{@link #LIGATURES} 225 * <td>Integer 226 * <td>LIGATURES_ON 227 * <td>0 (do not form optional ligatures) 228 * <tr> 229 * <th scope="row">{@link #TRACKING} 230 * <td>Number 231 * <td>TRACKING_LOOSE, TRACKING_TIGHT 232 * <td>0 (do not add tracking) 233 * </tr> 234 * </tbody> 235 * </table> 236 * 237 * @see java.awt.Font 238 * @see java.awt.font.TextLayout 239 * @see java.text.AttributedCharacterIterator 240 */ 241 public final class TextAttribute extends Attribute { 242 243 // table of all instances in this class, used by readResolve 244 private static final Map<String, TextAttribute> 245 instanceMap = new HashMap<String, TextAttribute>(29); 246 247 // For access from java.text.Bidi 248 static { 249 if (SharedSecrets.getJavaAWTFontAccess() == null) { 250 SharedSecrets.setJavaAWTFontAccess(new JavaAWTFontAccessImpl()); 251 } 252 } |