- 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 classTextLayout.CaretPolicy定义用于确定强插入位置的策略。
-
字段汇总
字段 变量和类型 字段 描述 static TextLayout.CaretPolicyDEFAULT_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 Objectclone()创建此TextLayout的副本。voiddraw(Graphics2D g2, float x, float y)在指定的Graphics2D上下文中的指定位置呈现此TextLayout。booleanequals(TextLayout rhs)如果两个布局相等,则返回true。floatgetAdvance()返回此TextLayout。floatgetAscent()返回此TextLayout的上升。bytegetBaseline()返回此TextLayout的基线。float[]getBaselineOffsets()返回用于此TextLayout的基线的偏移量数组。ShapegetBlackBoxBounds(int firstEndpoint, int secondEndpoint)返回指定范围内字符的黑框边界。Rectangle2DgetBounds()返回此TextLayout的边界。float[]getCaretInfo(TextHitInfo hit)返回有关与hit对应的插入符的信息。float[]getCaretInfo(TextHitInfo hit, Rectangle2D bounds)返回有关与hit对应的插入符的信息。ShapegetCaretShape(TextHitInfo hit)返回Shape表示此TextLayout的自然边界内指定命中的插入符号。ShapegetCaretShape(TextHitInfo hit, Rectangle2D bounds)Shape[]getCaretShapes(int offset)返回与强插入符号和弱插入符号对应的两个路径。Shape[]getCaretShapes(int offset, Rectangle2D bounds)返回与强插入符号和弱插入符号对应的两个路径。Shape[]getCaretShapes(int offset, Rectangle2D bounds, TextLayout.CaretPolicy policy)返回与强插入符号和弱插入符号对应的两个路径。intgetCharacterCount()返回此TextLayout表示的字符数。bytegetCharacterLevel(int index)返回字符的级别index。floatgetDescent()返回此TextLayout的下降。TextLayoutgetJustifiedLayout(float justificationWidth)创建一个以指定宽度对齐的TextLayout的副本。LayoutPathgetLayoutPath()返回LayoutPath,如果布局路径是默认路径,则返回null(x映射到advance,y映射到offset)。floatgetLeading()返回TextLayout。ShapegetLogicalHighlightShape(int firstEndpoint, int secondEndpoint)返回包含指定范围内逻辑选择的Shape,扩展到此TextLayout的自然边界。ShapegetLogicalHighlightShape(int firstEndpoint, int secondEndpoint, Rectangle2D bounds)返回包含指定范围内逻辑选择的Shape,扩展为指定的bounds。int[]getLogicalRangesForVisualSelection(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint)返回与可视选择对应的文本的逻辑范围。TextHitInfogetNextLeftHit(int offset)返回下一个插入符号左侧的顶部(顶部); 如果没有这样的命中,则返回null。TextHitInfogetNextLeftHit(int offset, TextLayout.CaretPolicy policy)返回下一个插入符号左侧的顶部(顶部); 如果没有这样的命中,返回null。TextHitInfogetNextLeftHit(TextHitInfo hit)返回下一个插入符号左侧的顶部(顶部); 如果没有这样的命中,返回null。TextHitInfogetNextRightHit(int offset)返回下一个插入符右侧(底部)的命中; 如果没有这样的命中,则返回null。TextHitInfogetNextRightHit(int offset, TextLayout.CaretPolicy policy)返回下一个插入符右侧(底部)的命中; 如果没有这样的命中,则返回null。TextHitInfogetNextRightHit(TextHitInfo hit)返回下一个插入符右侧(底部)的命中; 如果没有这样的命中,则返回null。ShapegetOutline(AffineTransform tx)返回Shape表示此TextLayout的大纲。RectanglegetPixelBounds(FontRenderContext frc, float x, float y)在给定位置给定FontRenderContext的图形中渲染时,返回此TextLayout的像素范围。floatgetVisibleAdvance()返回此TextLayout的前进,减去尾随空格。ShapegetVisualHighlightShape(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint)返回包含指定范围内的可视选择的Shape,扩展到边界。ShapegetVisualHighlightShape(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint, Rectangle2D bounds)返回包含指定范围内的可视选择的路径,扩展为bounds。TextHitInfogetVisualOtherHit(TextHitInfo hit)返回指定匹配的插入符号另一侧的匹配。protected voidhandleJustify(float justificationWidth)证明这种布局。TextHitInfohitTestChar(float x, float y)返回与指定点对应的TextHitInfo。TextHitInfohitTestChar(float x, float y, Rectangle2D bounds)返回与指定点对应的TextHitInfo。voidhitToPoint(TextHitInfo hit, Point2D point)将命中转换为标准坐标中的点。booleanisLeftToRight()如果此TextLayout具有从左到右的基本方向,则false如果它具有从右到左的基本方向,则返回true。booleanisVertical()如果此TextLayout是垂直的,则返回true。StringtoString()返回此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
-
-