- 所有已实现的接口:
Cloneable
TextLayout
是样式化字符数据的不可变图形表示。
它提供以下功能:
- 隐式双向分析和重新排序,
- 光标定位和移动,包括混合方向文本的拆分光标,
- 突出显示,包括混合方向文本的逻辑和视觉突出显示,
- 多个基线(罗马、悬挂和居中),
- 命中测试,
- 理由,
- 默认字体替换,
- 度量信息,例如上升、下降和前进,以及
- rendering
TextLayout
对象可以使用其 draw
方法进行渲染。
TextLayout
可以直接构造,也可以通过使用 LineBreakMeasurer
构造。直接构造时,源文本表示单个段落。 LineBreakMeasurer
允许将带样式的文本分成适合特定宽度的行。有关详细信息,请参阅 LineBreakMeasurer
文档。
TextLayout
构造的逻辑过程如下:
- 段落属性被提取和检查,
- 分析文本以进行双向重新排序,并在需要时计算重新排序信息,
- 文本被分割成样式运行
- 为样式运行选择字体,如果属性
TextAttribute.FONT
存在,首先使用字体,否则通过使用已定义的属性计算默认字体 - 如果文本在多个基线上,运行或子运行将进一步分解为共享公共基线的子运行,
- 使用所选字体为每次运行生成字形向量,
- 对字形向量执行最终的双向重新排序
从 TextLayout
对象的方法返回的所有图形信息都相对于 TextLayout
的原点,这是 TextLayout
对象的基线与其左边缘的交点。此外,传递给 TextLayout
对象方法的坐标被假定为相对于 TextLayout
对象的原点。客户端通常需要在 TextLayout
对象的坐标系和另一个对象(例如 Graphics
对象)的坐标系之间进行转换。
TextLayout
对象由带样式的文本构成,但它们不保留对其源文本的引用。因此,先前用于生成 TextLayout
的文本的更改不会影响 TextLayout
。
TextLayout
对象的三个方法(getNextRightHit
、getNextLeftHit
和 hitTestChar
)返回 TextHitInfo
的实例。这些 TextHitInfo
对象中包含的偏移量是相对于 TextLayout
的开始的,not到用于创建 TextLayout
的文本。同样,接受 TextHitInfo
实例作为参数的 TextLayout
方法期望 TextHitInfo
对象的偏移量是相对于 TextLayout
的,而不是任何底层文本存储模型。
Examples :
构建并绘制一个 TextLayout
及其边界矩形:
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);
命中测试 TextLayout
(确定哪个字符位于特定图形位置):
Point2D click = ...; TextHitInfo hit = layout.hitTestChar( (float) (click.getX() - loc.getX()), (float) (click.getY() - loc.getY()));
响应右箭头按键:
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]); } }
绘制与源文本中的子字符串对应的选择范围。所选区域在视觉上可能不连续:
// 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 translated to origin of layout g.setColor(selectionColor); g.fill(selection);
绘制视觉上连续的选择范围。选择范围可以对应源文本中的一个以上的子字符串。可以使用 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.
注意:字体旋转会导致文本基线旋转,多次运行不同的旋转会导致基线弯曲或锯齿形。为了考虑到这种(罕见的)可能性,一些 API 被指定为返回指标并采用“在基线相对坐标中”(例如上升、前进)的参数,而其他 API 在“标准坐标”中(例如 getBounds)。基线相对坐标中的值将“x”坐标映射到沿基线的距离(正 x 沿基线向前),“y”坐标映射到沿垂直于“x”处基线的距离(正y 是从基线矢量顺时针旋转 90 度)。标准坐标中的值沿 x 和 y 轴测量,0,0 位于 TextLayout 的原点。每个相关 API 的文档都指出什么值在什么坐标系中。一般来说,测量相关的API是在基线相对坐标中,而显示相关的API是在标准坐标中。
- 参见:
-
内部类总结
内部类 -
字段摘要
字段 -
构造方法总结
构造方法构造方法描述TextLayout
(String string, Font font, FontRenderContext frc) TextLayout
(String string, Map<? extends AttributedCharacterIterator.Attribute, ?> attributes, FontRenderContext frc) 从String
和属性集构造TextLayout
。从带样式文本的迭代器构造TextLayout
。 -
方法总结
修饰符和类型方法描述protected Object
clone()
创建此TextLayout
的副本。void
draw
(Graphics2D g2, float x, float y) 在指定的Graphics2D
上下文中的指定位置呈现此TextLayout
。boolean
equals
(TextLayout rhs) 如果两个布局相等,则返回true
。float
返回此TextLayout
的预付款。float
返回此TextLayout
的上升。byte
返回此TextLayout
的基线。float[]
返回用于此TextLayout
的基线的偏移量数组。getBlackBoxBounds
(int firstEndpoint, int secondEndpoint) 返回指定范围内字符的黑框边界。返回此TextLayout
的范围。float[]
getCaretInfo
(TextHitInfo hit) 返回有关对应于hit
的插入符号的信息。float[]
getCaretInfo
(TextHitInfo hit, Rectangle2D bounds) 返回有关对应于hit
的插入符号的信息。getCaretShape
(TextHitInfo hit) 返回一个Shape
表示此TextLayout
的自然边界内指定命中处的插入符号。getCaretShape
(TextHitInfo hit, Rectangle2D bounds) 返回一个Shape
表示指定范围内指定命中处的插入符。Shape[]
getCaretShapes
(int offset) 返回对应于强插入符和弱插入符的两条路径。Shape[]
getCaretShapes
(int offset, Rectangle2D bounds) 返回对应于强插入符和弱插入符的两条路径。Shape[]
getCaretShapes
(int offset, Rectangle2D bounds, TextLayout.CaretPolicy policy) 返回对应于强插入符和弱插入符的两条路径。int
返回此TextLayout
表示的字符数。byte
getCharacterLevel
(int index) 返回index
处的角色等级。float
返回此TextLayout
的血统。getJustifiedLayout
(float justificationWidth) 创建此TextLayout
的副本,对齐指定宽度。返回 LayoutPath,如果布局路径是默认路径(x 映射到前进,y 映射到偏移),则返回 null。float
返回TextLayout
的前导。getLogicalHighlightShape
(int firstEndpoint, int secondEndpoint) 返回一个Shape
包含指定范围内的逻辑选择,扩展到此TextLayout
的自然边界。getLogicalHighlightShape
(int firstEndpoint, int secondEndpoint, Rectangle2D bounds) 返回一个Shape
包含指定范围内的逻辑选择,扩展到指定的bounds
。int[]
getLogicalRangesForVisualSelection
(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint) 返回对应于视觉选择的文本的逻辑范围。getNextLeftHit
(int offset) 返回左侧(顶部)下一个插入符号的命中;如果没有这样的命中,返回null
。getNextLeftHit
(int offset, TextLayout.CaretPolicy policy) 返回左侧(顶部)下一个插入符号的命中;如果没有这样的命中,返回null
。返回左侧(顶部)下一个插入符号的命中;如果没有这样的命中,返回null
。getNextRightHit
(int offset) 返回右侧(底部)下一个插入符号的命中;如果没有这样的命中,返回null
。getNextRightHit
(int offset, TextLayout.CaretPolicy policy) 返回右侧(底部)下一个插入符号的命中;如果没有这样的命中,返回null
。返回右侧(底部)下一个插入符号的命中;如果没有这样的命中,返回null
。返回表示此TextLayout
轮廓的Shape
。getPixelBounds
(FontRenderContext frc, float x, float y) 返回在给定位置处具有给定FontRenderContext
的图形中呈现时此TextLayout
的像素边界。float
返回此TextLayout
减去尾随空格的前进。getVisualHighlightShape
(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint) 返回一个Shape
包含指定范围内的视觉选择,扩展到边界。getVisualHighlightShape
(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint, Rectangle2D bounds) 返回包含指定范围内视觉选择的路径,扩展为bounds
。返回指定命中插入符号对面的命中。protected void
handleJustify
(float justificationWidth) 证明这个布局。hitTestChar
(float x, float y) 返回指定点对应的TextHitInfo
。hitTestChar
(float x, float y, Rectangle2D bounds) 返回指定点对应的TextHitInfo
。void
hitToPoint
(TextHitInfo hit, Point2D point) 将命中转换为标准坐标中的点。boolean
如果此TextLayout
具有从左到右的基本方向,则返回true
;如果它具有从右到左的基本方向,则返回false
。boolean
如果这个TextLayout
是垂直的,则返回true
。toString()
返回此TextLayout
的调试信息。
-
字段详细信息
-
DEFAULT_CARET_POLICY
当客户端未指定策略时使用此CaretPolicy
。使用此策略,对方向与线方向相同的字符的命中比对反方向字符的命中更强。如果字符的方向相同,则字符前缘的命中比字符后缘的命中强。
-
-
构造方法详细信息
-
TextLayout
- 参数:
string
- 要显示的文本font
- 用于设置文本样式的Font
frc
- 包含有关正确测量文本所需的图形设备的信息。文本测量可能会因设备分辨率和抗锯齿等属性而略有不同。此参数不指定TextLayout
和用户空间之间的转换。
-
TextLayout
public TextLayout(String string, Map <? extends AttributedCharacterIterator.Attribute , ?> attributes, FontRenderContext frc) 从String
和属性集构造TextLayout
。所有文本都使用提供的属性设置样式。
string
必须指定单个文本段落,因为双向算法需要整个段落。- 参数:
string
- 要显示的文本attributes
- 用于设置文本样式的属性frc
- 包含有关正确测量文本所需的图形设备的信息。文本测量可能会因设备分辨率和抗锯齿等属性而略有不同。此参数不指定TextLayout
和用户空间之间的转换。
-
TextLayout
从带样式文本的迭代器构造TextLayout
。迭代器必须指定单个文本段落,因为双向算法需要整个段落。
- 参数:
text
- 要显示的样式文本frc
- 包含有关正确测量文本所需的图形设备的信息。文本测量可能会因设备分辨率和抗锯齿等属性而略有不同。此参数不指定TextLayout
和用户空间之间的转换。
-
-
方法详情
-
clone
创建此TextLayout
的副本。 -
getJustifiedLayout
创建此TextLayout
的副本,对齐指定宽度。如果这个
TextLayout
已经被证明是合理的,则抛出异常。如果此TextLayout
对象的调整比为零,则返回与此TextLayout
相同的TextLayout
。- 参数:
justificationWidth
- 对齐线时使用的宽度。为了获得最佳效果,它不应与线路当前的推进相差太大。- 返回:
-
a
TextLayout
对齐到指定的宽度。 - 抛出:
Error
- 如果此布局已被证明是合理的,则会引发错误。
-
handleJustify
protected void handleJustify(float justificationWidth) 证明这个布局。被子类重写以控制对齐(如果有子类,那就是......)只有段落属性(来自源文本,可能由布局属性默认)指示非零对齐比率时,布局才会对齐。文本将对齐到指定的宽度。当前的实现还调整了悬挂标点符号和尾随空格以突出对齐宽度。一旦合理化,布局可能无法重新合理化。一些代码可能依赖于布局的不变性。子类不应直接调用此方法,而应调用 getJustifiedLayout,它会在此布局的克隆上调用此方法,同时保留原始布局。
- 参数:
justificationWidth
- 对齐线时使用的宽度。为了获得最佳效果,它不应与线路当前的推进相差太大。- 参见:
-
getBaseline
public byte getBaseline()返回此TextLayout
的基线。基线是Font
中定义的值之一,它们是罗马的、居中的和悬挂的。上升和下降是相对于这个基线的。baselineOffsets
也与此基线相关。- 返回:
-
这个
TextLayout
的基线。 - 参见:
-
getBaselineOffsets
public float[] getBaselineOffsets()返回用于此TextLayout
的基线的偏移量数组。该数组由
Font
中定义的值之一索引,这些值是罗马的、居中的和悬挂的。这些值是相对于此TextLayout
对象的基线的,因此getBaselineOffsets[getBaseline()] == 0
。将偏移量添加到TextLayout
对象基线的位置以获得新基线的位置。- 返回:
-
包含用于此
TextLayout
的基线的偏移量数组。 - 参见:
-
getAdvance
public float getAdvance()返回此TextLayout
的预付款。 advance 是从原点到最右边(最底部)字符的 advance 的距离。这是在基线相对坐标中。- 返回:
-
这个
TextLayout
的进步。
-
getVisibleAdvance
public float getVisibleAdvance()返回此TextLayout
减去尾随空格的前进。这是在基线相对坐标中。- 返回:
-
这个
TextLayout
的前进没有尾随空格。 - 参见:
-
getAscent
public float getAscent()返回此TextLayout
的上升。上升是从TextLayout
的顶部(右侧)到基线的距离。它始终为正或零。 ascent 足以容纳上标文本,并且是每个字形的 ascent、offset 和 baseline 之和的最大值。 ascent 是 TextLayout 中所有文本从基线开始的最大上升。它位于基线相对坐标中。- 返回:
-
这个
TextLayout
的上升。
-
getDescent
public float getDescent()返回此TextLayout
的血统。下降是从基线到TextLayout
底部(左侧)的距离。它始终为正或零。下降足以容纳下标文本,并且是每个字形的下降、偏移和基线之和的最大值。这是 TextLayout 中所有文本从基线开始的最大下降。它位于基线相对坐标中。- 返回:
-
这个
TextLayout
的血统。
-
getLeading
public float getLeading()返回TextLayout
的前导。前导是此TextLayout
的建议行间距。这是在基线相对坐标中。前导是根据
TextLayout
中所有字形向量的前导、下降和基线计算得出的。算法大致如下: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
的领导。
-
getBounds
返回此TextLayout
的范围。边界在标准坐标中。由于光栅化效果,此边界可能不会包含 TextLayout 呈现的所有像素。
它可能与TextLayout
的上升、下降、原点或推进不完全一致。- 返回:
-
一个
Rectangle2D
是这个TextLayout
的边界。
-
getPixelBounds
返回在给定位置处具有给定FontRenderContext
的图形中呈现时此TextLayout
的像素边界。图形渲染上下文不必与用于创建此TextLayout
的FontRenderContext
相同,并且可以为空。如果为空,则使用此TextLayout
的FontRenderContext
。- 参数:
frc
-Graphics
的FontRenderContext
。x
- 渲染此TextLayout
的 x 坐标。y
- 渲染此TextLayout
的 y 坐标。- 返回:
-
a
Rectangle
限制会受影响的像素。 - 自从:
- 1.6
- 参见:
-
isLeftToRight
public boolean isLeftToRight()如果此TextLayout
具有从左到右的基本方向,则返回true
;如果它具有从右到左的基本方向,则返回false
。TextLayout
的基本方向为从左到右 (LTR) 或从右到左 (RTL)。基本方向独立于行上文本的实际方向,可以是 LTR、RTL 或混合方向。默认情况下,从左到右的布局应该向左对齐。如果布局位于标签行上,则标签从左到右排列,因此逻辑上连续的布局从左到右。 RTL 布局则相反。默认情况下,它们应该向左对齐,并且选项卡从右到左运行。- 返回:
true
如果这个TextLayout
的基本方向是从左到右;false
否则。
-
isVertical
public boolean isVertical()如果这个TextLayout
是垂直的,则返回true
。- 返回:
true
如果这个TextLayout
是垂直的;false
否则。
-
getCharacterCount
public int getCharacterCount()返回此TextLayout
表示的字符数。- 返回:
-
此
TextLayout
中的字符数。
-
getCaretInfo
返回有关对应于hit
的插入符号的信息。数组的第一个元素是插入符号与基线的交点,表示为沿基线的距离。数组的第二个元素是插入符号的反斜率(运行/上升),相对于该点的基线进行测量。此方法仅供参考。要显示插入符,最好使用
getCaretShapes
。- 参数:
hit
- 命中此TextLayout
中的一个角色bounds
- 构建插入符信息的范围。边界位于基线相对坐标中。- 返回:
- 包含插入符号的位置和斜率的二元数组。返回的插入符信息位于基线相对坐标中。
- 参见:
-
getCaretInfo
返回有关对应于hit
的插入符号的信息。此方法是getCaretInfo
的便捷重载,并使用此TextLayout
的自然边界。- 参数:
hit
- 命中此TextLayout
中的一个角色- 返回:
- 有关与命中对应的插入符号的信息。返回的插入符信息位于基线相对坐标中。
-
getNextRightHit
返回右侧(底部)下一个插入符号的命中;如果没有这样的命中,返回null
。如果命中字符索引超出范围,则抛出IllegalArgumentException
。- 参数:
hit
- 命中此布局中的字符- 返回:
-
一个命中,其插入符号出现在所提供命中或
null
插入符号右侧(底部)的下一个位置。
-
getNextRightHit
返回右侧(底部)下一个插入符号的命中;如果没有这样的命中,返回null
。命中位于指定偏移量处的强插入符右侧,由指定策略确定。返回的命中是由指定策略确定的两个可能命中中较强的一个。- 参数:
offset
- 此TextLayout
中的插入偏移量。不能小于 0 或大于此TextLayout
对象的字符数。policy
- 用于选择强插入符的策略- 返回:
-
一个命中,其插入符号出现在所提供命中的插入符号右侧(底部)的下一个位置,或
null
。
-
getNextRightHit
返回右侧(底部)下一个插入符号的命中;如果没有这样的命中,返回null
。命中位于指定偏移处的强插入符右侧,由默认策略确定。返回的命中是由默认策略确定的两个可能命中中较强的一个。- 参数:
offset
- 此TextLayout
中的插入偏移量。不能小于 0 或大于TextLayout
对象的字符数。- 返回:
-
一个命中,其插入符号出现在所提供命中的插入符号右侧(底部)的下一个位置,或
null
。
-
getNextLeftHit
返回左侧(顶部)下一个插入符号的命中;如果没有这样的命中,返回null
。如果命中字符索引超出范围,则抛出IllegalArgumentException
。- 参数:
hit
- 命中此TextLayout
中的角色。- 返回:
-
一个命中,其插入符号出现在所提供命中的插入符号左侧(顶部)的下一个位置,或
null
。
-
getNextLeftHit
返回左侧(顶部)下一个插入符号的命中;如果没有这样的命中,返回null
。命中位于强插入符号左侧指定的偏移量处,由指定的策略确定。返回的命中是由指定策略确定的两个可能命中中较强的一个。- 参数:
offset
- 此TextLayout
中的插入偏移量。不能小于 0 或大于此TextLayout
对象的字符数。policy
- 用于选择强插入符的策略- 返回:
-
一个命中,其插入符号出现在所提供命中的插入符号左侧(顶部)的下一个位置,或
null
。
-
getNextLeftHit
返回左侧(顶部)下一个插入符号的命中;如果没有这样的命中,返回null
。命中位于指定偏移处的强插入符左侧,由默认策略确定。返回的命中是由默认策略确定的两个可能命中中较强的一个。- 参数:
offset
- 此TextLayout
中的插入偏移量。不能小于 0 或大于此TextLayout
对象的字符数。- 返回:
-
一个命中,其插入符号出现在所提供命中的插入符号左侧(顶部)的下一个位置,或
null
。
-
getVisualOtherHit
返回指定命中插入符号对面的命中。- 参数:
hit
- 指定命中- 返回:
- 位于指定命中插入符号对面的命中。
-
getCaretShape
返回一个Shape
表示指定范围内指定命中处的插入符。- 参数:
hit
- 生成插入符号的命中bounds
- 用于生成插入符号的TextLayout
的边界。边界位于基线相对坐标中。- 返回:
Shape
代表插入符号。返回的形状在标准坐标中。
-
getCaretShape
返回一个Shape
表示此TextLayout
的自然边界内指定命中处的插入符号。- 参数:
hit
- 生成插入符号的命中- 返回:
Shape
代表插入符号。返回的形状在标准坐标中。
-
getCharacterLevel
public byte getCharacterLevel(int index) 返回index
处的角色等级。索引 -1 和characterCount
被分配给这个TextLayout
的基本级别。- 参数:
index
- 从中获取等级的角色的索引- 返回:
- 指定索引处的字符级别。
-
getCaretShapes
返回对应于强插入符和弱插入符的两条路径。- 参数:
offset
- 此TextLayout
中的偏移量bounds
- 插入符号扩展到的范围。边界位于基线相对坐标中。policy
- 指定的CaretPolicy
- 返回:
-
两条路径的数组。元素零是强插入符号。如果有两个插入符,元素一是弱插入符,否则是
null
。返回的形状在标准坐标中。
-
getCaretShapes
返回对应于强插入符和弱插入符的两条路径。此方法是使用默认插入符号策略的getCaretShapes
的便捷重载。- 参数:
offset
- 此TextLayout
中的偏移量bounds
- 插入符号扩展到的范围。这是在基线相对坐标中。- 返回:
-
对应于
DEFAULT_CARET_POLICY
定义的强插入符和弱插入符的两条路径。这些在标准坐标中。
-
getCaretShapes
返回对应于强插入符和弱插入符的两条路径。此方法是getCaretShapes
的便捷重载,它使用默认插入符号策略和此TextLayout
对象的自然边界。- 参数:
offset
- 此TextLayout
中的偏移量- 返回:
-
对应于
DEFAULT_CARET_POLICY
定义的强插入符和弱插入符的两条路径。这些在标准坐标中。
-
getLogicalRangesForVisualSelection
public int[] getLogicalRangesForVisualSelection(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint) 返回对应于视觉选择的文本的逻辑范围。- 参数:
firstEndpoint
- 视觉范围的端点secondEndpoint
- 可视范围的另一个端点。此端点可以小于firstEndpoint
。- 返回:
- 表示所选范围的开始/限制对的整数数组。
- 参见:
-
getVisualHighlightShape
public Shape getVisualHighlightShape(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint, Rectangle2D bounds) 返回包含指定范围内视觉选择的路径,扩展为bounds
。如果选择包括最左边(最上面)的位置,则选择会扩展到
bounds
的左侧(顶部)。如果选择包括最右边(最底部)的位置,则选择会扩展到边界的右侧(底部)。选择的高度(垂直线上的宽度)总是扩展到bounds
。尽管选择始终是连续的,但逻辑选择的文本在具有混合方向文本的行上可能是不连续的。可以使用
getLogicalRangesForVisualSelection
检索所选文本的逻辑范围。例如,考虑文本“ABCdef”,其中大写字母表示从右到左的文本,呈现在从右到左的行上,视觉选择从 0L(“A”的前缘)到 3T(尾部) 'd' 的边缘)。文本显示如下,粗体下划线区域表示选择:defCBA
逻辑选择范围是 0-3、4-6(ABC、ef),因为视觉上连续的文本在逻辑上是不连续的。另请注意,由于选择了布局上最右边的位置(“A”的右侧),因此选择会扩展到边界的右侧。- 参数:
firstEndpoint
- 视觉选择的一端secondEndpoint
——视觉选择的另一端bounds
- 将选择扩展到的边界矩形。这是在基线相对坐标中。- 返回:
-
一个
Shape
包含选择。这是在标准坐标中。 - 参见:
-
getVisualHighlightShape
返回一个Shape
包含指定范围内的视觉选择,扩展到边界。此方法是getVisualHighlightShape
的便利重载,它使用此TextLayout
的自然边界。- 参数:
firstEndpoint
- 视觉选择的一端secondEndpoint
——视觉选择的另一端- 返回:
-
一个
Shape
包含选择。这是在标准坐标中。
-
getLogicalHighlightShape
返回一个Shape
包含指定范围内的逻辑选择,扩展到指定的bounds
。如果选择范围包括第一个逻辑字符,则选择将扩展到此
TextLayout
开始之前的bounds
部分。如果范围包括最后一个逻辑字符,则选择将扩展到此TextLayout
结束后的bounds
部分。选择的高度(垂直线上的宽度)总是扩展到bounds
。在具有混合方向文本的行上,选择可以是不连续的。只有在 start 和 limit 之间的逻辑范围内的字符才会显示为选中。例如,考虑文本“ABCdef”,其中大写字母表示从右到左的文本,呈现在从右到左的行上,逻辑选择从 0 到 4 ('ABCd')。文本显示如下,粗体表示选择,下划线表示扩展名:
defCBA
选择不连续,因为所选字符在视觉上不连续。另请注意,由于范围包括第一个逻辑字符 (A),因此选择会扩展到布局开始之前的bounds
部分,在本例中(从右到左的行)是布局的右侧部分bounds
。- 参数:
firstEndpoint
- 要选择的字符范围内的端点secondEndpoint
- 要选择的字符范围的另一个端点。可以小于firstEndpoint
。该范围包括 min(firstEndpoint, secondEndpoint) 处的字符,但不包括 max(firstEndpoint, secondEndpoint)。bounds
- 将选择扩展到的边界矩形。这是在基线相对坐标中。- 返回:
- 包含所选内容的区域。这是在标准坐标中。
- 参见:
-
getLogicalHighlightShape
返回一个Shape
包含指定范围内的逻辑选择,扩展到此TextLayout
的自然边界。此方法是getLogicalHighlightShape
的便利重载,它使用此TextLayout
的自然边界。- 参数:
firstEndpoint
- 要选择的字符范围内的端点secondEndpoint
- 要选择的字符范围的另一个端点。可以小于firstEndpoint
。该范围包括 min(firstEndpoint, secondEndpoint) 处的字符,但不包括 max(firstEndpoint, secondEndpoint)。- 返回:
-
一个
Shape
包含选择。这是在标准坐标中。
-
getBlackBoxBounds
返回指定范围内字符的黑框边界。黑框边界是一个区域,由与开始和限制之间的字符对应的所有字形的边界框的并集组成。该区域可以不相交。- 参数:
firstEndpoint
- 字符范围的一端secondEndpoint
- 字符范围的另一端。可以小于firstEndpoint
。- 返回:
Shape
包含黑框边界。这是在标准坐标中。
-
hitTestChar
返回指定点对应的TextHitInfo
。TextLayout
映射边界外的坐标命中第一个逻辑字符的前缘,或最后一个逻辑字符的后缘,视情况而定,无论该字符在行中的位置如何。仅沿基线的方向用于进行此评估。- 参数:
x
- 距此TextLayout
原点的 x 偏移量。这是在标准坐标中。y
- 距此TextLayout
原点的 y 偏移量。这是在标准坐标中。bounds
-TextLayout
的范围。这是在基线相对坐标中。- 返回:
- 描述指定点下的字符和边缘(前导或尾随)的命中。
-
hitTestChar
返回指定点对应的TextHitInfo
。此方法是hitTestChar
的便利重载,它使用此TextLayout
的自然边界。- 参数:
x
- 距此TextLayout
原点的 x 偏移量。这是在标准坐标中。y
- 距此TextLayout
原点的 y 偏移量。这是在标准坐标中。- 返回:
- 描述指定点下的字符和边缘(前导或尾随)的命中。
-
equals
如果两个布局相等,则返回true
。遵守equals(Object)
的总合同。- 参数:
rhs
- 与这个TextLayout
比较的TextLayout
- 返回:
true
如果指定的TextLayout
等于此TextLayout
。
-
toString
返回此TextLayout
的调试信息。 -
draw
在指定的Graphics2D
上下文中的指定位置呈现此TextLayout
。布局的原点位于 x, y。渲染可能会触及此位置getBounds()
内的任何点。这使g2
保持不变。文本沿基线路径呈现。- 参数:
g2
- 渲染布局的Graphics2D
上下文x
- 这个TextLayout
原点的X坐标y
- 这个TextLayout
原点的Y坐标- 参见:
-
getOutline
返回表示此TextLayout
轮廓的Shape
。- 参数:
tx
- 一个可选的AffineTransform
应用于这个TextLayout
的轮廓。- 返回:
-
一个
Shape
就是这个TextLayout
的轮廓。这是在标准坐标中。
-
getLayoutPath
返回 LayoutPath,如果布局路径是默认路径(x 映射到前进,y 映射到偏移),则返回 null。- 返回:
- 布局路径
- 自从:
- 1.6
-
hitToPoint
将命中转换为标准坐标中的点。该点位于字符的基线上,位于字符的前缘或后缘(视情况而定)。如果路径在命中所代表的角色的一侧断开,则该点将与该角色相邻。- 参数:
hit
- 要检查的命中。这必须是对 TextLayout 的有效点击。point
- 返回点。该点位于标准坐标中。- 抛出:
IllegalArgumentException
- 如果命中对于 TextLayout 无效。NullPointerException
- 如果命中或点为空。- 自从:
- 1.6
-