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