Class TextAttribute
- All Implemented Interfaces:
Serializable
TextAttribute
class defines attribute keys and
attribute values used for text rendering.
TextAttribute
instances are used as attribute keys to
identify attributes in
Font
,
TextLayout
,
AttributedCharacterIterator
,
and other classes handling text attributes. Other constants defined
in this class can be used as attribute values.
For each text attribute, the documentation provides:
- the type of its value,
- the relevant predefined constants, if any
- the default effect if the attribute is absent
- the valid values if there are limitations
- a description of the effect.
Values
- The values of attributes must always be immutable.
- Where value limitations are given, any value outside of that set is reserved for future use; the value will be treated as the default.
- The value
null
is treated the same as the default value and results in the default behavior. - If the value is not of the proper type, the attribute will be ignored.
- The identity of the value does not matter, only the actual
value. For example,
TextAttribute.WEIGHT_BOLD
andFloat.valueOf(2.0f)
indicate the sameWEIGHT
. - Attribute values of type
Number
(used forWEIGHT
,WIDTH
,POSTURE
,SIZE
,JUSTIFICATION
, andTRACKING
) can vary along their natural range and are not restricted to the predefined constants.Number.floatValue()
is used to get the actual value from theNumber
. - The values for
WEIGHT
,WIDTH
, andPOSTURE
are interpolated by the system, which can select the 'nearest available' font or use other techniques to approximate the user's request.
Summary of attributes
Key | Value Type | Principal Constants | Default Value |
---|---|---|---|
FAMILY
| String | See Font DIALOG ,
DIALOG_INPUT ,
SERIF ,
SANS_SERIF , and
MONOSPACED .
| "Default" (use platform default) |
WEIGHT
| Number | WEIGHT_REGULAR, WEIGHT_BOLD | WEIGHT_REGULAR |
WIDTH
| Number | WIDTH_CONDENSED, WIDTH_REGULAR, WIDTH_EXTENDED | WIDTH_REGULAR |
POSTURE
| Number | POSTURE_REGULAR, POSTURE_OBLIQUE | POSTURE_REGULAR |
SIZE
| Number | none | 12.0 |
TRANSFORM
| TransformAttribute
| See TransformAttribute IDENTITY
| TransformAttribute.IDENTITY |
SUPERSCRIPT
| Integer | SUPERSCRIPT_SUPER, SUPERSCRIPT_SUB | 0 (use the standard glyphs and metrics) |
FONT
| Font
| none | null (do not override font resolution) |
CHAR_REPLACEMENT
| GraphicAttribute
| none | null (draw text using font glyphs) |
FOREGROUND
| Paint
| none | null (use current graphics paint) |
BACKGROUND
| Paint
| none | null (do not render background) |
UNDERLINE
| Integer | UNDERLINE_ON | -1 (do not render underline) |
STRIKETHROUGH
| Boolean | STRIKETHROUGH_ON | false (do not render strikethrough) |
RUN_DIRECTION
| Boolean | RUN_DIRECTION_LTR RUN_DIRECTION_RTL | null (use Bidi standard default)
|
BIDI_EMBEDDING
| Integer | none | 0 (use base line direction) |
JUSTIFICATION
| Number | JUSTIFICATION_FULL | JUSTIFICATION_FULL |
INPUT_METHOD_HIGHLIGHT
| InputMethodHighlight ,
Annotation
| (see class) | null (do not apply input highlighting) |
INPUT_METHOD_UNDERLINE
| Integer | UNDERLINE_LOW_ONE_PIXEL, UNDERLINE_LOW_TWO_PIXEL | -1 (do not render underline) |
SWAP_COLORS
| Boolean | SWAP_COLORS_ON | false (do not swap colors) |
NUMERIC_SHAPING
| NumericShaper
| none | null (do not shape digits) |
KERNING
| Integer | KERNING_ON | 0 (do not request kerning) |
LIGATURES
| Integer | LIGATURES_ON | 0 (do not form optional ligatures) |
TRACKING
| Number | TRACKING_LOOSE, TRACKING_TIGHT | 0 (do not add tracking) |
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionstatic final TextAttribute
Attribute key for the paint used to render the background of the text.static final TextAttribute
Attribute key for the embedding level of the text.static final TextAttribute
Attribute key for a user-defined glyph to display in lieu of the font's standard glyph for a character.static final TextAttribute
Attribute key for the font name.static final TextAttribute
Attribute key used to provide the font to use to render text.static final TextAttribute
Attribute key for the paint used to render the text.static final TextAttribute
Attribute key for input method highlight styles.static final TextAttribute
Attribute key for input method underlines.static final TextAttribute
Attribute key for the justification of a paragraph.static final Float
Justify the line to the full requested width.static final Float
Do not allow the line to be justified.static final TextAttribute
Attribute key to request kerning.static final Integer
Request standard kerning.static final TextAttribute
Attribute key for enabling optional ligatures.static final Integer
Request standard optional ligatures.static final TextAttribute
Attribute key for converting ASCII decimal digits to other decimal ranges.static final TextAttribute
Attribute key for the posture of a font.static final Float
The standard italic posture.static final Float
The standard posture, upright.static final TextAttribute
Attribute key for the run direction of the line.static final Boolean
Left-to-right run direction.static final Boolean
Right-to-left run direction.static final TextAttribute
Attribute key for the font size.static final TextAttribute
Attribute key for strikethrough.static final Boolean
A single strikethrough.static final TextAttribute
Attribute key for superscripting and subscripting.static final Integer
Standard subscript.static final Integer
Standard superscript.static final TextAttribute
Attribute key for swapping foreground and backgroundPaints
.static final Boolean
Swap foreground and background.static final TextAttribute
Attribute key to control tracking.static final Float
Perform loose tracking.static final Float
Perform tight tracking.static final TextAttribute
Attribute key for the transform of a font.static final TextAttribute
Attribute key for underline.static final Integer
Single pixel dashed low underline.static final Integer
Single pixel dotted low underline.static final Integer
Double pixel gray low underline.static final Integer
Single pixel solid low underline.static final Integer
Double pixel solid low underline.static final Integer
Standard underline.static final TextAttribute
Attribute key for the weight of a font.static final Float
The standard bold weight.static final Float
A moderately lighter weight thanWEIGHT_BOLD
.static final Float
An intermediate weight betweenWEIGHT_LIGHT
andWEIGHT_STANDARD
.static final Float
The lightest predefined weight.static final Float
An extra heavy weight.static final Float
A moderately heavier weight thanWEIGHT_BOLD
.static final Float
The standard light weight.static final Float
An intermediate weight betweenWEIGHT_REGULAR
andWEIGHT_BOLD
.static final Float
The standard weight.static final Float
A moderately heavier weight thanWEIGHT_REGULAR
.static final Float
The heaviest predefined weight.static final TextAttribute
Attribute key for the width of a font.static final Float
The most condensed predefined width.static final Float
The most extended predefined width.static final Float
The standard width.static final Float
A moderately condensed width.static final Float
A moderately extended width.Fields inherited from class java.text.AttributedCharacterIterator.Attribute
INPUT_METHOD_SEGMENT, LANGUAGE, READING
-
Constructor Summary
ModifierConstructorDescriptionprotected
TextAttribute
(String name) Constructs aTextAttribute
with the specified name. -
Method Summary
Modifier and TypeMethodDescriptionprotected Object
Resolves instances being deserialized to the predefined constants.Methods inherited from class java.text.AttributedCharacterIterator.Attribute
equals, getName, hashCode, toString
-
Field Details
-
FAMILY
Attribute key for the font name. Values are instances ofString
. The default value is"Default"
, which causes the platform default font family to be used.The
Font
class defines constants for the logical font namesDIALOG
,DIALOG_INPUT
,SANS_SERIF
,SERIF
, andMONOSPACED
.This defines the value passed as
name
to theFont
constructor. Both logical and physical font names are allowed. If a font with the requested name is not found, the default font is used.Note: This attribute is unfortunately misnamed, as it specifies the face name and not just the family. Thus values such as "Lucida Sans Bold" will select that face if it exists. Note, though, that if the requested face does not exist, the default will be used with regular weight. The "Bold" in the name is part of the face name, not a separate request that the font's weight be bold.
-
WEIGHT
Attribute key for the weight of a font. Values are instances ofNumber
. The default value isWEIGHT_REGULAR
.Several constant values are provided, see
WEIGHT_EXTRA_LIGHT
,WEIGHT_LIGHT
,WEIGHT_DEMILIGHT
,WEIGHT_REGULAR
,WEIGHT_SEMIBOLD
,WEIGHT_MEDIUM
,WEIGHT_DEMIBOLD
,WEIGHT_BOLD
,WEIGHT_HEAVY
,WEIGHT_EXTRABOLD
, andWEIGHT_ULTRABOLD
. The valueWEIGHT_BOLD
corresponds to the style valueFont.BOLD
as passed to theFont
constructor.The value is roughly the ratio of the stem width to that of the regular weight.
The system can interpolate the provided value.
-
WEIGHT_EXTRA_LIGHT
-
WEIGHT_LIGHT
-
WEIGHT_DEMILIGHT
An intermediate weight betweenWEIGHT_LIGHT
andWEIGHT_STANDARD
.- See Also:
-
WEIGHT_REGULAR
The standard weight. This is the default value forWEIGHT
.- See Also:
-
WEIGHT_SEMIBOLD
A moderately heavier weight thanWEIGHT_REGULAR
.- See Also:
-
WEIGHT_MEDIUM
An intermediate weight betweenWEIGHT_REGULAR
andWEIGHT_BOLD
.- See Also:
-
WEIGHT_DEMIBOLD
-
WEIGHT_BOLD
-
WEIGHT_HEAVY
-
WEIGHT_EXTRABOLD
-
WEIGHT_ULTRABOLD
-
WIDTH
Attribute key for the width of a font. Values are instances ofNumber
. The default value isWIDTH_REGULAR
.Several constant values are provided, see
WIDTH_CONDENSED
,WIDTH_SEMI_CONDENSED
,WIDTH_REGULAR
,WIDTH_SEMI_EXTENDED
,WIDTH_EXTENDED
.The value is roughly the ratio of the advance width to that of the regular width.
The system can interpolate the provided value.
-
WIDTH_CONDENSED
-
WIDTH_SEMI_CONDENSED
-
WIDTH_REGULAR
The standard width. This is the default value forWIDTH
.- See Also:
-
WIDTH_SEMI_EXTENDED
-
WIDTH_EXTENDED
-
POSTURE
Attribute key for the posture of a font. Values are instances ofNumber
. The default value isPOSTURE_REGULAR
.Two constant values are provided,
POSTURE_REGULAR
andPOSTURE_OBLIQUE
. The valuePOSTURE_OBLIQUE
corresponds to the style valueFont.ITALIC
as passed to theFont
constructor.The value is roughly the slope of the stems of the font, expressed as the run over the rise. Positive values lean right.
The system can interpolate the provided value.
This will affect the font's italic angle as returned by
Font.getItalicAngle
.- See Also:
-
POSTURE_REGULAR
The standard posture, upright. This is the default value forPOSTURE
.- See Also:
-
POSTURE_OBLIQUE
-
SIZE
Attribute key for the font size. Values are instances ofNumber
. The default value is 12pt.This corresponds to the
size
parameter to theFont
constructor.Very large or small sizes will impact rendering performance, and the rendering system might not render text at these sizes. Negative sizes are illegal and result in the default size.
Note that the appearance and metrics of a 12pt font with a 2x transform might be different than that of a 24 point font with no transform.
-
TRANSFORM
Attribute key for the transform of a font. Values are instances ofTransformAttribute
. The default value isTransformAttribute.IDENTITY
.The
TransformAttribute
class defines the constantIDENTITY
.This corresponds to the transform passed to
Font.deriveFont(AffineTransform)
. Since that transform is mutable andTextAttribute
values must not be, theTransformAttribute
wrapper class is used.The primary intent is to support scaling and skewing, though other effects are possible.
Some transforms will cause the baseline to be rotated and/or shifted. The text and the baseline are transformed together so that the text follows the new baseline. For example, with text on a horizontal baseline, the new baseline follows the direction of the unit x vector passed through the transform. Text metrics are measured against this new baseline. So, for example, with other things being equal, text rendered with a rotated TRANSFORM and an unrotated TRANSFORM will measure as having the same ascent, descent, and advance.
In styled text, the baselines for each such run are aligned one after the other to potentially create a non-linear baseline for the entire run of text. For more information, see
TextLayout.getLayoutPath()
.- See Also:
-
SUPERSCRIPT
Attribute key for superscripting and subscripting. Values are instances ofInteger
. The default value is 0, which means that no superscript or subscript is used.Two constant values are provided, see
SUPERSCRIPT_SUPER
andSUPERSCRIPT_SUB
. These have the values 1 and -1 respectively. Values of greater magnitude define greater levels of superscript or subscripting, for example, 2 corresponds to super-superscript, 3 to super-super-superscript, and similarly for negative values and subscript, up to a level of 7 (or -7). Values beyond this range are reserved; behavior is platform-dependent.SUPERSCRIPT
can impact the ascent and descent of a font. The ascent and descent can never become negative, however. -
SUPERSCRIPT_SUPER
-
SUPERSCRIPT_SUB
-
FONT
Attribute key used to provide the font to use to render text. Values are instances ofFont
. The default value is null, indicating that normal resolution of aFont
from attributes should be performed.TextLayout
andAttributedCharacterIterator
work in terms ofMaps
ofTextAttributes
. Normally, all the attributes are examined and used to select and configure aFont
instance. If aFONT
attribute is present, though, its associatedFont
will be used. This provides a way for users to override the resolution of font attributes into aFont
, or force use of a particularFont
instance. This also allows users to specify subclasses ofFont
in cases where aFont
can be subclassed.FONT
is used for special situations where clients already have aFont
instance but still need to useMap
-based APIs. Typically, there will be no other attributes in theMap
except theFONT
attribute. WithMap
-based APIs the common case is to specify all attributes individually, soFONT
is not needed or desirable.However, if both
FONT
and other attributes are present in theMap
, the rendering system will merge the attributes defined in theFont
with the additional attributes. This merging process classifiesTextAttributes
into two groups. One group, the 'primary' group, is considered fundamental to the selection and metric behavior of a font. These attributes areFAMILY
,WEIGHT
,WIDTH
,POSTURE
,SIZE
,TRANSFORM
,SUPERSCRIPT
, andTRACKING
. The other group, the 'secondary' group, consists of all other defined attributes, with the exception ofFONT
itself.To generate the new
Map
, first theFont
is obtained from theFONT
attribute, and all of its attributes extracted into a newMap
. Then only the secondary attributes from the originalMap
are added to those in the newMap
. Thus the values of primary attributes come solely from theFont
, and the values of secondary attributes originate with theFont
but can be overridden by other values in theMap
.Note:
Font's Map
-based constructor andderiveFont
methods do not process theFONT
attribute, as these are used to create newFont
objects. Instead,Font.getFont(Map)
should be used to handle theFONT
attribute.- See Also:
-
CHAR_REPLACEMENT
Attribute key for a user-defined glyph to display in lieu of the font's standard glyph for a character. Values are instances of GraphicAttribute. The default value is null, indicating that the standard glyphs provided by the font should be used.This attribute is used to reserve space for a graphic or other component embedded in a line of text. It is required for correct positioning of 'inline' components within a line when bidirectional reordering (see
Bidi
) is performed. Each character (Unicode code point) will be rendered using the provided GraphicAttribute. Typically, the characters to which this attribute is applied should be\uFFFC
.The GraphicAttribute determines the logical and visual bounds of the text; the actual Font values are ignored.
- See Also:
-
FOREGROUND
Attribute key for the paint used to render the text. Values are instances ofPaint
. The default value is null, indicating that thePaint
set on theGraphics2D
at the time of rendering is used.Glyphs will be rendered using this
Paint
regardless of thePaint
value set on theGraphics
(but seeSWAP_COLORS
).- See Also:
-
BACKGROUND
Attribute key for the paint used to render the background of the text. Values are instances ofPaint
. The default value is null, indicating that the background should not be rendered.The logical bounds of the text will be filled using this
Paint
, and then the text will be rendered on top of it (but seeSWAP_COLORS
).The visual bounds of the text is extended to include the logical bounds, if necessary. The outline is not affected.
- See Also:
-
UNDERLINE
Attribute key for underline. Values are instances ofInteger
. The default value is -1, which means no underline.The constant value
UNDERLINE_ON
is provided.The underline affects both the visual bounds and the outline of the text.
-
UNDERLINE_ON
-
STRIKETHROUGH
Attribute key for strikethrough. Values are instances ofBoolean
. The default value isfalse
, which means no strikethrough.The constant value
STRIKETHROUGH_ON
is provided.The strikethrough affects both the visual bounds and the outline of the text.
-
STRIKETHROUGH_ON
-
RUN_DIRECTION
Attribute key for the run direction of the line. Values are instances ofBoolean
. The default value is null, which indicates that the standard Bidi algorithm for determining run direction should be used with the valueBidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT
.The constants
RUN_DIRECTION_RTL
andRUN_DIRECTION_LTR
are provided.This determines the value passed to the
Bidi
constructor to select the primary direction of the text in the paragraph.Note: This attribute should have the same value for all the text in a paragraph, otherwise the behavior is undetermined.
- See Also:
-
RUN_DIRECTION_LTR
-
RUN_DIRECTION_RTL
-
BIDI_EMBEDDING
Attribute key for the embedding level of the text. Values are instances ofInteger
. The default value isnull
, indicating that the Bidirectional algorithm should run without explicit embeddings.Positive values 1 through 61 are embedding levels, negative values -1 through -61 are override levels. The value 0 means that the base line direction is used. These levels are passed in the embedding levels array to the
Bidi
constructor.Note: When this attribute is present anywhere in a paragraph, then any Unicode bidi control characters (RLO, LRO, RLE, LRE, and PDF) in the paragraph are disregarded, and runs of text where this attribute is not present are treated as though it were present and had the value 0.
- See Also:
-
JUSTIFICATION
Attribute key for the justification of a paragraph. Values are instances ofNumber
. The default value is 1, indicating that justification should use the full width provided. Values are pinned to the range [0..1].The constants
JUSTIFICATION_FULL
andJUSTIFICATION_NONE
are provided.Specifies the fraction of the extra space to use when justification is requested on a
TextLayout
. For example, if the line is 50 points wide and it is requested to justify to 70 points, a value of 0.75 will pad to use three-quarters of the remaining space, or 15 points, so that the resulting line will be 65 points in length.Note: This should have the same value for all the text in a paragraph, otherwise the behavior is undetermined.
- See Also:
-
JUSTIFICATION_FULL
Justify the line to the full requested width. This is the default value forJUSTIFICATION
.- See Also:
-
JUSTIFICATION_NONE
-
INPUT_METHOD_HIGHLIGHT
Attribute key for input method highlight styles.Values are instances of
InputMethodHighlight
orAnnotation
. The default value isnull
, which means that input method styles should not be applied before rendering.If adjacent runs of text with the same
InputMethodHighlight
need to be rendered separately, theInputMethodHighlights
should be wrapped inAnnotation
instances.Input method highlights are used while text is being composed by an input method. Text editing components should retain them even if they generally only deal with unstyled text, and make them available to the drawing routines.
- See Also:
-
INPUT_METHOD_UNDERLINE
Attribute key for input method underlines. Values are instances ofInteger
. The default value is-1
, which means no underline.Several constant values are provided, see
UNDERLINE_LOW_ONE_PIXEL
,UNDERLINE_LOW_TWO_PIXEL
,UNDERLINE_LOW_DOTTED
,UNDERLINE_LOW_GRAY
, andUNDERLINE_LOW_DASHED
.This may be used in conjunction with
UNDERLINE
if desired. The primary purpose is for use by input methods. Other use of these underlines for simple ornamentation might confuse users.The input method underline affects both the visual bounds and the outline of the text.
- Since:
- 1.3
-
UNDERLINE_LOW_ONE_PIXEL
Single pixel solid low underline.- Since:
- 1.3
- See Also:
-
UNDERLINE_LOW_TWO_PIXEL
Double pixel solid low underline.- Since:
- 1.3
- See Also:
-
UNDERLINE_LOW_DOTTED
Single pixel dotted low underline.- Since:
- 1.3
- See Also:
-
UNDERLINE_LOW_GRAY
Double pixel gray low underline.- Since:
- 1.3
- See Also:
-
UNDERLINE_LOW_DASHED
Single pixel dashed low underline.- Since:
- 1.3
- See Also:
-
SWAP_COLORS
Attribute key for swapping foreground and backgroundPaints
. Values are instances ofBoolean
. The default value isfalse
, which means do not swap colors.The constant value
SWAP_COLORS_ON
is defined.If the
FOREGROUND
attribute is set, itsPaint
will be used as the background, otherwise thePaint
currently on theGraphics
will be used. If theBACKGROUND
attribute is set, itsPaint
will be used as the foreground, otherwise the system will find a contrasting color to the (resolved) background so that the text will be visible.- See Also:
-
SWAP_COLORS_ON
-
NUMERIC_SHAPING
Attribute key for converting ASCII decimal digits to other decimal ranges. Values are instances ofNumericShaper
. The default isnull
, which means do not perform numeric shaping.When a numeric shaper is defined, the text is first processed by the shaper before any other analysis of the text is performed.
Note: This should have the same value for all the text in the paragraph, otherwise the behavior is undetermined.
- Since:
- 1.4
- See Also:
-
KERNING
Attribute key to request kerning. Values are instances ofInteger
. The default value is0
, which does not request kerning.The constant value
KERNING_ON
is provided.The default advances of single characters are not appropriate for some character sequences, for example "To" or "AWAY". Without kerning the adjacent characters appear to be separated by too much space. Kerning causes selected sequences of characters to be spaced differently for a more pleasing visual appearance.
- Since:
- 1.6
-
KERNING_ON
-
LIGATURES
Attribute key for enabling optional ligatures. Values are instances ofInteger
. The default value is0
, which means do not use optional ligatures.The constant value
LIGATURES_ON
is defined.Ligatures required by the writing system are always enabled.
- Since:
- 1.6
-
LIGATURES_ON
-
TRACKING
Attribute key to control tracking. Values are instances ofNumber
. The default value is0
, which means no additional tracking.The constant values
TRACKING_TIGHT
andTRACKING_LOOSE
are provided.The tracking value is multiplied by the font point size and passed through the font transform to determine an additional amount to add to the advance of each glyph cluster. Positive tracking values will inhibit formation of optional ligatures. Tracking values are typically between
-0.1
and0.3
; values outside this range are generally not desirable.- Since:
- 1.6
-
TRACKING_TIGHT
-
TRACKING_LOOSE
-
-
Constructor Details
-
TextAttribute
Constructs aTextAttribute
with the specified name.- Parameters:
name
- the attribute name to assign to thisTextAttribute
-
-
Method Details
-
readResolve
Resolves instances being deserialized to the predefined constants.- Overrides:
readResolve
in classAttributedCharacterIterator.Attribute
- Returns:
- the resolved
Attribute
object - Throws:
InvalidObjectException
- if the object to resolve is not an instance ofAttribute
-