public final class TextLayout extends Objectimplements Cloneable
TextLayout is an immutable graphical representation of styled character data.
It provides the following capabilities:
A TextLayout object can be rendered using its draw method.
TextLayout can be constructed either directly or through the use of a LineBreakMeasurer. When constructed directly, the source text represents a single paragraph. LineBreakMeasurer allows styled text to be broken into lines that fit within a particular width. See the LineBreakMeasurer documentation for more information.
TextLayout construction logically proceeds as follows:
TextAttribute.FONT is present, otherwise by computing a default font using the attributes that have been defined All graphical information returned from a TextLayout object's methods is relative to the origin of the TextLayout, which is the intersection of the TextLayout object's baseline with its left edge. Also, coordinates passed into a TextLayout object's methods are assumed to be relative to the TextLayout object's origin. Clients usually need to translate between a TextLayout object's coordinate system and the coordinate system in another object (such as a Graphics object).
TextLayout objects are constructed from styled text, but they do not retain a reference to their source text. Thus, changes in the text previously used to generate a TextLayout do not affect the TextLayout.
Three methods on a TextLayout object (getNextRightHit, getNextLeftHit, and hitTestChar) return instances of TextHitInfo. The offsets contained in these TextHitInfo objects are relative to the start of the TextLayout, not to the text used to create the TextLayout. Similarly, TextLayout methods that accept TextHitInfo instances as parameters expect the TextHitInfo object's offsets to be relative to the TextLayout, not to any underlying text storage model.
Examples:
Constructing and drawing a TextLayout and its bounding rectangle:
Graphics2D g = ...;
Point2D loc = ...;
Font font = Font.getFont("Helvetica-bold-italic");
FontRenderContext frc = g.getFontRenderContext();
TextLayout layout = new TextLayout("This is a string", font, frc);
layout.draw(g, (float)loc.getX(), (float)loc.getY());
Rectangle2D bounds = layout.getBounds();
bounds.setRect(bounds.getX()+loc.getX(),
bounds.getY()+loc.getY(),
bounds.getWidth(),
bounds.getHeight());
g.draw(bounds);
Hit-testing a TextLayout (determining which character is at a particular graphical location):
Point2D click = ...;
TextHitInfo hit = layout.hitTestChar(
(float) (click.getX() - loc.getX()),
(float) (click.getY() - loc.getY()));
Responding to a right-arrow key press:
int insertionIndex = ...;
TextHitInfo next = layout.getNextRightHit(insertionIndex);
if (next != null) {
// translate graphics to origin of layout on screen
g.translate(loc.getX(), loc.getY());
Shape[] carets = layout.getCaretShapes(next.getInsertionIndex());
g.draw(carets[0]);
if (carets[1] != null) {
g.draw(carets[1]);
}
}
Drawing a selection range corresponding to a substring in the source text. The selected area may not be visually contiguous:
// selStart, selLimit should be relative to the layout, // not to the source text int selStart = ..., selLimit = ...; Color selectionColor = ...; Shape selection = layout.getLogicalHighlightShape(selStart, selLimit); // selection may consist of disjoint areas // graphics is assumed to be tranlated to origin of layout g.setColor(selectionColor); g.fill(selection);
Drawing a visually contiguous selection range. The selection range may correspond to more than one substring in the source text. The ranges of the corresponding source text substrings can be obtained with getLogicalRangesForVisualSelection():
TextHitInfo selStart = ..., selLimit = ...; Shape selection = layout.getVisualHighlightShape(selStart, selLimit); g.setColor(selectionColor); g.fill(selection); int[] ranges = getLogicalRangesForVisualSelection(selStart, selLimit); // ranges[0], ranges[1] is the first selection range, // ranges[2], ranges[3] is the second selection range, etc.
Note: Font rotations can cause text baselines to be rotated, and multiple runs with different rotations can cause the baseline to bend or zig-zag. In order to account for this (rare) possibility, some APIs are specified to return metrics and take parameters 'in baseline-relative coordinates' (e.g. ascent, advance), and others are in 'in standard coordinates' (e.g. getBounds). Values in baseline-relative coordinates map the 'x' coordinate to the distance along the baseline, (positive x is forward along the baseline), and the 'y' coordinate to a distance along the perpendicular to the baseline at 'x' (positive y is 90 degrees clockwise from the baseline vector). Values in standard coordinates are measured along the x and y axes, with 0,0 at the origin of the TextLayout. Documentation for each relevant API indicates what values are in what coordinate system. In general, measurement-related APIs are in baseline-relative coordinates, while display-related APIs are in standard coordinates.
LineBreakMeasurer,
TextAttribute,
TextHitInfo,
LayoutPath
| Modifier and Type | Class and Description |
|---|---|
static class |
TextLayout
Defines a policy for determining the strong caret location.
|
| Modifier and Type | Field and Description |
|---|---|
static TextLayout |
DEFAULT_CARET_POLICY
This
CaretPolicy is used when a policy is not specified by the client.
|
| Constructor and Description |
|---|
TextLayout(AttributedCharacterIterator
Constructs a
TextLayout from an iterator over styled text.
|
TextLayout(String
|
TextLayout(String
Constructs a
TextLayout from a
String and an attribute set.
|
| Modifier and Type | Method and Description |
|---|---|
protected Object |
clone()
Creates a copy of this
TextLayout.
|
void |
draw(Graphics2D
Renders this
TextLayout at the specified location in the specified
Graphics2D context.
|
boolean |
equals(Object
Returns
true if the specified
Object is a
TextLayout object and if the specified
Object equals this
TextLayout.
|
boolean |
equals(TextLayout
Returns
true if the two layouts are equal.
|
float |
getAdvance()
Returns the advance of this
TextLayout.
|
float |
getAscent()
Returns the ascent of this
TextLayout.
|
byte |
getBaseline()
Returns the baseline for this
TextLayout.
|
float[] |
getBaselineOffsets()
Returns the offsets array for the baselines used for this
TextLayout.
|
Shape |
getBlackBoxBounds(int firstEndpoint, int secondEndpoint)
Returns the black box bounds of the characters in the specified range.
|
Rectangle2D |
getBounds()
Returns the bounds of this
TextLayout.
|
float[] |
getCaretInfo(TextHitInfo
Returns information about the caret corresponding to
hit.
|
float[] |
getCaretInfo(TextHitInfo
Returns information about the caret corresponding to
hit.
|
Shape |
getCaretShape(TextHitInfo
Returns a
Shape representing the caret at the specified hit inside the natural bounds of this
TextLayout.
|
Shape |
getCaretShape(TextHitInfo
Returns a
Shape representing the caret at the specified hit inside the specified bounds.
|
Shape |
getCaretShapes(int offset)
Returns two paths corresponding to the strong and weak caret.
|
Shape |
getCaretShapes(int offset, Rectangle2D
Returns two paths corresponding to the strong and weak caret.
|
Shape |
getCaretShapes(int offset, Rectangle2D
Returns two paths corresponding to the strong and weak caret.
|
int |
getCharacterCount()
Returns the number of characters represented by this
TextLayout.
|
byte |
getCharacterLevel(int index)
Returns the level of the character at
index.
|
float |
getDescent()
Returns the descent of this
TextLayout.
|
TextLayout |
getJustifiedLayout(float justificationWidth)
Creates a copy of this
TextLayout justified to the specified width.
|
LayoutPath |
getLayoutPath()
Return the LayoutPath, or null if the layout path is the default path (x maps to advance, y maps to offset).
|
float |
getLeading()
Returns the leading of the
TextLayout.
|
Shape |
getLogicalHighlightShape(int firstEndpoint, int secondEndpoint)
Returns a
Shape enclosing the logical selection in the specified range, extended to the natural bounds of this
TextLayout.
|
Shape |
getLogicalHighlightShape(int firstEndpoint, int secondEndpoint, Rectangle2D
Returns a
Shape enclosing the logical selection in the specified range, extended to the specified
bounds.
|
int[] |
getLogicalRangesForVisualSelection(TextHitInfo
Returns the logical ranges of text corresponding to a visual selection.
|
TextHitInfo |
getNextLeftHit(int offset)
Returns the hit for the next caret to the left (top); if no such hit, returns
null.
|
TextHitInfo |
getNextLeftHit(int offset, TextLayout
Returns the hit for the next caret to the left (top); if no such hit, returns
null.
|
TextHitInfo |
getNextLeftHit(TextHitInfo
Returns the hit for the next caret to the left (top); if no such hit, returns
null.
|
TextHitInfo |
getNextRightHit(int offset)
Returns the hit for the next caret to the right (bottom); if no such hit, returns
null.
|
TextHitInfo |
getNextRightHit(int offset, TextLayout
Returns the hit for the next caret to the right (bottom); if no such hit, returns
null.
|
TextHitInfo |
getNextRightHit(TextHitInfo
Returns the hit for the next caret to the right (bottom); if there is no such hit, returns
null.
|
Shape |
getOutline(AffineTransform
Returns a
Shape representing the outline of this
TextLayout.
|
Rectangle |
getPixelBounds(FontRenderContext
Returns the pixel bounds of this
TextLayout when rendered in a graphics with the given
FontRenderContext at the given location.
|
float |
getVisibleAdvance()
Returns the advance of this
TextLayout, minus trailing whitespace.
|
Shape |
getVisualHighlightShape(TextHitInfo
Returns a
Shape enclosing the visual selection in the specified range, extended to the bounds.
|
Shape |
getVisualHighlightShape(TextHitInfo
Returns a path enclosing the visual selection in the specified range, extended to
bounds.
|
TextHitInfo |
getVisualOtherHit(TextHitInfo
Returns the hit on the opposite side of the specified hit's caret.
|
protected void |
handleJustify(float justificationWidth)
Justify this layout.
|
int |
hashCode()
Returns the hash code of this
TextLayout.
|
TextHitInfo |
hitTestChar(float x, float y)
Returns a
TextHitInfo corresponding to the specified point.
|
TextHitInfo |
hitTestChar(float x, float y, Rectangle2D
Returns a
TextHitInfo corresponding to the specified point.
|
void |
hitToPoint(TextHitInfo
Convert a hit to a point in standard coordinates.
|
boolean |
isLeftToRight()
Returns
true if this
TextLayout has a left-to-right base direction or
false if it has a right-to-left base direction.
|
boolean |
isVertical()
Returns
true if this
TextLayout is vertical.
|
String |
toString()
Returns debugging information for this
TextLayout.
|
public static final TextLayout.CaretPolicy DEFAULT_CARET_POLICY
CaretPolicy is used when a policy is not specified by the client. With this policy, a hit on a character whose direction is the same as the line direction is stronger than a hit on a counterdirectional character. If the characters' directions are the same, a hit on the leading edge of a character is stronger than a hit on the trailing edge of a character.
public TextLayout(Stringstring, Font font, FontRenderContext frc)
TextLayout from a
String and a
Font. All the text is styled using the specified
Font.
The String must specify a single paragraph of text, because an entire paragraph is required for the bidirectional algorithm.
string - the text to display
font - a
Font used to style the text
frc - contains information about a graphics device which is needed to measure the text correctly. Text measurements can vary slightly depending on the device resolution, and attributes such as antialiasing. This parameter does not specify a translation between the
TextLayout and user space.
public TextLayout(Stringstring, Map <? extends AttributedCharacterIterator .Attribute ,?> attributes, FontRenderContext frc)
TextLayout from a
String and an attribute set.
All the text is styled using the provided attributes.
string must specify a single paragraph of text because an entire paragraph is required for the bidirectional algorithm.
string - the text to display
attributes - the attributes used to style the text
frc - contains information about a graphics device which is needed to measure the text correctly. Text measurements can vary slightly depending on the device resolution, and attributes such as antialiasing. This parameter does not specify a translation between the
TextLayout and user space.
public TextLayout(AttributedCharacterIteratortext, FontRenderContext frc)
TextLayout from an iterator over styled text.
The iterator must specify a single paragraph of text because an entire paragraph is required for the bidirectional algorithm.
text - the styled text to display
frc - contains information about a graphics device which is needed to measure the text correctly. Text measurements can vary slightly depending on the device resolution, and attributes such as antialiasing. This parameter does not specify a translation between the
TextLayout and user space.
protected Objectclone()
TextLayout.
public TextLayoutgetJustifiedLayout(float justificationWidth)
TextLayout justified to the specified width.
If this TextLayout has already been justified, an exception is thrown. If this TextLayout object's justification ratio is zero, a TextLayout identical to this TextLayout is returned.
justificationWidth - the width to use when justifying the line. For best results, it should not be too different from the current advance of the line.
TextLayout justified to the specified width.
Error - if this layout has already been justified, an Error is thrown.
protected void handleJustify(float justificationWidth)
Some code may rely on immutablity of layouts. Subclassers should not call this directly, but instead should call getJustifiedLayout, which will call this method on a clone of this layout, preserving the original.
justificationWidth - the width to use when justifying the line. For best results, it should not be too different from the current advance of the line.
getJustifiedLayout(float)
public byte getBaseline()
TextLayout. The baseline is one of the values defined in
Font, which are roman, centered and hanging. Ascent and descent are relative to this baseline. The
baselineOffsets are also relative to this baseline.
TextLayout.
getBaselineOffsets(),
Font
public float[] getBaselineOffsets()
TextLayout.
The array is indexed by one of the values defined in Font, which are roman, centered and hanging. The values are relative to this TextLayout object's baseline, so that getBaselineOffsets[getBaseline()] == 0. Offsets are added to the position of the TextLayout object's baseline to get the position for the new baseline.
TextLayout.
getBaseline(),
Font
public float getAdvance()
TextLayout. The advance is the distance from the origin to the advance of the rightmost (bottommost) character. This is in baseline-relative coordinates.
TextLayout.
public float getVisibleAdvance()
TextLayout, minus trailing whitespace. This is in baseline-relative coordinates.
TextLayout without the trailing whitespace.
getAdvance()
public float getAscent()
TextLayout. The ascent is the distance from the top (right) of the
TextLayout to the baseline. It is always either positive or zero. The ascent is sufficient to accommodate superscripted text and is the maximum of the sum of the ascent, offset, and baseline of each glyph. The ascent is the maximum ascent from the baseline of all the text in the TextLayout. It is in baseline-relative coordinates.
TextLayout.
public float getDescent()
TextLayout. The descent is the distance from the baseline to the bottom (left) of the
TextLayout. It is always either positive or zero. The descent is sufficient to accommodate subscripted text and is the maximum of the sum of the descent, offset, and baseline of each glyph. This is the maximum descent from the baseline of all the text in the TextLayout. It is in baseline-relative coordinates.
TextLayout.
public float getLeading()
TextLayout. The leading is the suggested interline spacing for this
TextLayout. This is in baseline-relative coordinates.
The leading is computed from the leading, descent, and baseline of all glyphvectors in the TextLayout. The algorithm is roughly as follows:
maxD = 0;
maxDL = 0;
for (GlyphVector g in all glyphvectors) {
maxD = max(maxD, g.getDescent() + offsets[g.getBaseline()]);
maxDL = max(maxDL, g.getDescent() + g.getLeading() +
offsets[g.getBaseline()]);
}
return maxDL - maxD;
TextLayout.
public Rectangle2DgetBounds()
TextLayout. The bounds are in standard coordinates.
Due to rasterization effects, this bounds might not enclose all of the pixels rendered by the TextLayout.
It might not coincide exactly with the ascent, descent, origin or advance of theTextLayout.
Rectangle2D that is the bounds of this
TextLayout.
public RectanglegetPixelBounds(FontRenderContext frc, float x, float y)
TextLayout when rendered in a graphics with the given
FontRenderContext at the given location. The graphics render context need not be the same as the
FontRenderContext used to create this
TextLayout, and can be null. If it is null, the
FontRenderContext of this
TextLayout is used.
frc - the
FontRenderContext of the
Graphics.
x - the x-coordinate at which to render this
TextLayout.
y - the y-coordinate at which to render this
TextLayout.
Rectangle bounding the pixels that would be affected.
GlyphVector.getPixelBounds(java.awt.font.FontRenderContext, float, float)
public boolean isLeftToRight()
true if this
TextLayout has a left-to-right base direction or
false if it has a right-to-left base direction. The
TextLayout has a base direction of either left-to-right (LTR) or right-to-left (RTL). The base direction is independent of the actual direction of text on the line, which may be either LTR, RTL, or mixed. Left-to-right layouts by default should position flush left. If the layout is on a tabbed line, the tabs run left to right, so that logically successive layouts position left to right. The opposite is true for RTL layouts. By default they should position flush left, and tabs run right-to-left.
true if the base direction of this
TextLayout is left-to-right;
false otherwise.
public boolean isVertical()
true if this
TextLayout is vertical.
true if this
TextLayout is vertical;
false otherwise.
public int getCharacterCount()
TextLayout.
TextLayout.
public float[] getCaretInfo(TextHitInfohit, Rectangle2D bounds)
hit. The first element of the array is the intersection of the caret with the baseline, as a distance along the baseline. The second element of the array is the inverse slope (run/rise) of the caret, measured with respect to the baseline at that point.
This method is meant for informational use. To display carets, it is better to use getCaretShapes.
hit - a hit on a character in this
TextLayout
bounds - the bounds to which the caret info is constructed. The bounds is in baseline-relative coordinates.
getCaretShapes(int, Rectangle2D, TextLayout.CaretPolicy),
Font.getItalicAngle()
public float[] getCaretInfo(TextHitInfohit)
hit. This method is a convenience overload of
getCaretInfo and uses the natural bounds of this
TextLayout.
hit - a hit on a character in this
TextLayout
public TextHitInfogetNextRightHit(TextHitInfo hit)
null. If the hit character index is out of bounds, an
IllegalArgumentException is thrown.
hit - a hit on a character in this layout
null.
public TextHitInfogetNextRightHit(int offset, TextLayout .CaretPolicy policy)
null. The hit is to the right of the strong caret at the specified offset, as determined by the specified policy. The returned hit is the stronger of the two possible hits, as determined by the specified policy.
offset - an insertion offset in this
TextLayout. Cannot be less than 0 or greater than this
TextLayout object's character count.
policy - the policy used to select the strong caret
null.
public TextHitInfogetNextRightHit(int offset)
null. The hit is to the right of the strong caret at the specified offset, as determined by the default policy. The returned hit is the stronger of the two possible hits, as determined by the default policy.
offset - an insertion offset in this
TextLayout. Cannot be less than 0 or greater than the
TextLayout object's character count.
null.
public TextHitInfogetNextLeftHit(TextHitInfo hit)
null. If the hit character index is out of bounds, an
IllegalArgumentException is thrown.
hit - a hit on a character in this
TextLayout.
null.
public TextHitInfogetNextLeftHit(int offset, TextLayout .CaretPolicy policy)
null. The hit is to the left of the strong caret at the specified offset, as determined by the specified policy. The returned hit is the stronger of the two possible hits, as determined by the specified policy.
offset - an insertion offset in this
TextLayout. Cannot be less than 0 or greater than this
TextLayout object's character count.
policy - the policy used to select the strong caret
null.
public TextHitInfogetNextLeftHit(int offset)
null. The hit is to the left of the strong caret at the specified offset, as determined by the default policy. The returned hit is the stronger of the two possible hits, as determined by the default policy.
offset - an insertion offset in this
TextLayout. Cannot be less than 0 or greater than this
TextLayout object's character count.
null.
public TextHitInfogetVisualOtherHit(TextHitInfo hit)
hit - the specified hit
public ShapegetCaretShape(TextHitInfo hit, Rectangle2D bounds)
Shape representing the caret at the specified hit inside the specified bounds.
hit - the hit at which to generate the caret
bounds - the bounds of the
TextLayout to use in generating the caret. The bounds is in baseline-relative coordinates.
Shape representing the caret. The returned shape is in standard coordinates.
public ShapegetCaretShape(TextHitInfo hit)
Shape representing the caret at the specified hit inside the natural bounds of this
TextLayout.
hit - the hit at which to generate the caret
Shape representing the caret. The returned shape is in standard coordinates.
public byte getCharacterLevel(int index)
index. Indices -1 and
characterCount are assigned the base level of this
TextLayout.
index - the index of the character from which to get the level
public Shape[] getCaretShapes(int offset, Rectangle2D bounds, TextLayout .CaretPolicy policy)
offset - an offset in this
TextLayout
bounds - the bounds to which to extend the carets. The bounds is in baseline-relative coordinates.
policy - the specified
CaretPolicy
null. The returned shapes are in standard coordinates.
public Shape[] getCaretShapes(int offset, Rectangle2D bounds)
getCaretShapes that uses the default caret policy.
offset - an offset in this
TextLayout
bounds - the bounds to which to extend the carets. This is in baseline-relative coordinates.
DEFAULT_CARET_POLICY. These are in standard coordinates.
public Shape[] getCaretShapes(int offset)
getCaretShapes that uses the default caret policy and this
TextLayout object's natural bounds.
offset - an offset in this
TextLayout
DEFAULT_CARET_POLICY. These are in standard coordinates.
public int[] getLogicalRangesForVisualSelection(TextHitInfofirstEndpoint, TextHitInfo secondEndpoint)
firstEndpoint - an endpoint of the visual range
secondEndpoint - the other endpoint of the visual range. This endpoint can be less than
firstEndpoint.
getVisualHighlightShape(TextHitInfo, TextHitInfo, Rectangle2D)
public ShapegetVisualHighlightShape(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint, Rectangle2D bounds)
bounds.
If the selection includes the leftmost (topmost) position, the selection is extended to the left (top) of bounds. If the selection includes the rightmost (bottommost) position, the selection is extended to the right (bottom) of the bounds. The height (width on vertical lines) of the selection is always extended to bounds.
Although the selection is always contiguous, the logically selected text can be discontiguous on lines with mixed-direction text. The logical ranges of text selected can be retrieved using getLogicalRangesForVisualSelection. For example, consider the text 'ABCdef' where capital letters indicate right-to-left text, rendered on a right-to-left line, with a visual selection from 0L (the leading edge of 'A') to 3T (the trailing edge of 'd'). The text appears as follows, with bold underlined areas representing the selection:
defCBA
The logical selection ranges are 0-3, 4-6 (ABC, ef) because the visually contiguous text is logically discontiguous. Also note that since the rightmost position on the layout (to the right of 'A') is selected, the selection is extended to the right of the bounds.
firstEndpoint - one end of the visual selection
secondEndpoint - the other end of the visual selection
bounds - the bounding rectangle to which to extend the selection. This is in baseline-relative coordinates.
Shape enclosing the selection. This is in standard coordinates.
getLogicalRangesForVisualSelection(TextHitInfo, TextHitInfo),
getLogicalHighlightShape(int, int, Rectangle2D)
public ShapegetVisualHighlightShape(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint)
Shape enclosing the visual selection in the specified range, extended to the bounds. This method is a convenience overload of
getVisualHighlightShape that uses the natural bounds of this
TextLayout.
firstEndpoint - one end of the visual selection
secondEndpoint - the other end of the visual selection
Shape enclosing the selection. This is in standard coordinates.
public ShapegetLogicalHighlightShape(int firstEndpoint, int secondEndpoint, Rectangle2D bounds)
Shape enclosing the logical selection in the specified range, extended to the specified
bounds.
If the selection range includes the first logical character, the selection is extended to the portion of bounds before the start of this TextLayout. If the range includes the last logical character, the selection is extended to the portion of bounds after the end of this TextLayout. The height (width on vertical lines) of the selection is always extended to bounds.
The selection can be discontiguous on lines with mixed-direction text. Only those characters in the logical range between start and limit appear selected. For example, consider the text 'ABCdef' where capital letters indicate right-to-left text, rendered on a right-to-left line, with a logical selection from 0 to 4 ('ABCd'). The text appears as follows, with bold standing in for the selection, and underlining for the extension:
defCBA
The selection is discontiguous because the selected characters are visually discontiguous. Also note that since the range includes the first logical character (A), the selection is extended to the portion of the
bounds before the start of the layout, which in this case (a right-to-left line) is the right portion of the
bounds.
firstEndpoint - an endpoint in the range of characters to select
secondEndpoint - the other endpoint of the range of characters to select. Can be less than
firstEndpoint. The range includes the character at min(firstEndpoint, secondEndpoint), but excludes max(firstEndpoint, secondEndpoint).
bounds - the bounding rectangle to which to extend the selection. This is in baseline-relative coordinates.
getVisualHighlightShape(TextHitInfo, TextHitInfo, Rectangle2D)
public ShapegetLogicalHighlightShape(int firstEndpoint, int secondEndpoint)
Shape enclosing the logical selection in the specified range, extended to the natural bounds of this
TextLayout. This method is a convenience overload of
getLogicalHighlightShape that uses the natural bounds of this
TextLayout.
firstEndpoint - an endpoint in the range of characters to select
secondEndpoint - the other endpoint of the range of characters to select. Can be less than
firstEndpoint. The range includes the character at min(firstEndpoint, secondEndpoint), but excludes max(firstEndpoint, secondEndpoint).
Shape enclosing the selection. This is in standard coordinates.
public ShapegetBlackBoxBounds(int firstEndpoint, int secondEndpoint)
firstEndpoint - one end of the character range
secondEndpoint - the other end of the character range. Can be less than
firstEndpoint.
Shape enclosing the black box bounds. This is in standard coordinates.
public TextHitInfohitTestChar(float x, float y, Rectangle2D bounds)
TextHitInfo corresponding to the specified point. Coordinates outside the bounds of the
TextLayout map to hits on the leading edge of the first logical character, or the trailing edge of the last logical character, as appropriate, regardless of the position of that character in the line. Only the direction along the baseline is used to make this evaluation.
x - the x offset from the origin of this
TextLayout. This is in standard coordinates.
y - the y offset from the origin of this
TextLayout. This is in standard coordinates.
bounds - the bounds of the
TextLayout. This is in baseline-relative coordinates.
public TextHitInfohitTestChar(float x, float y)
TextHitInfo corresponding to the specified point. This method is a convenience overload of
hitTestChar that uses the natural bounds of this
TextLayout.
x - the x offset from the origin of this
TextLayout. This is in standard coordinates.
y - the y offset from the origin of this
TextLayout. This is in standard coordinates.
public int hashCode()
TextLayout.
hashCode in class
Object
TextLayout.
Object.equals(java.lang.Object) ,
System.identityHashCode(java.lang.Object)
public boolean equals(Objectobj)
true if the specified
Object is a
TextLayout object and if the specified
Object equals this
TextLayout.
equals in class
Object
obj - an
Object to test for equality
true if the specified
Object equals this
TextLayout;
false otherwise.
Object.hashCode() ,
HashMap
public boolean equals(TextLayoutrhs)
true if the two layouts are equal. Two layouts are equal if they contain equal glyphvectors in the same order.
rhs - the
TextLayout to compare to this
TextLayout
true if the specified
TextLayout equals this
TextLayout.
public StringtoString()
TextLayout.
public void draw(Graphics2Dg2, float x, float y)
TextLayout at the specified location in the specified
Graphics2D context. The origin of the layout is placed at x, y. Rendering may touch any point within
getBounds() of this position. This leaves the
g2 unchanged. Text is rendered along the baseline path.
g2 - the
Graphics2D context into which to render the layout
x - the X coordinate of the origin of this
TextLayout
y - the Y coordinate of the origin of this
TextLayout
getBounds()
public ShapegetOutline(AffineTransform tx)
Shape representing the outline of this
TextLayout.
tx - an optional
AffineTransform to apply to the outline of this
TextLayout.
Shape that is the outline of this
TextLayout. This is in standard coordinates.
public LayoutPathgetLayoutPath()
public void hitToPoint(TextHitInfohit, Point2D point)
hit - the hit to check. This must be a valid hit on the TextLayout.
point - the returned point. The point is in standard coordinates.
IllegalArgumentException - if the hit is not valid for the TextLayout.
NullPointerException - if hit or point is null.