- java.lang.Object
-
- java.awt.font.TextLayout
-
- All Implemented Interfaces:
-
Cloneable
public final class TextLayout extends Object implements Cloneable
TextLayout
是风格字符数据的不可变图形表示。它提供以下功能:
- 隐式双向分析和重新排序,
- 光标定位和移动,包括用于混合方向文本的分割光标,
- 突出显示,包括混合方向文本的逻辑和视觉突出显示,
- 多个基线(罗马,挂起和居中),
- 打测试,
- 理由,
- 默认字体替换,
- 诸如上升,下降和提前的度量信息,以及
- 翻译
A
TextLayout
对象可以使用其draw
方法呈现。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
-
-
Nested Class Summary
Nested Classes Modifier and Type Class 描述 static class
TextLayout.CaretPolicy
定义确定强插插位置的策略。
-
Field Summary
Fields Modifier and Type Field 描述 static TextLayout.CaretPolicy
DEFAULT_CARET_POLICY
当客户端未指定策略时,将使用此CaretPolicy
。
-
构造方法摘要
构造方法 Constructor 描述 TextLayout(String string, Font font, FontRenderContext frc)
构造一个TextLayout
从String
和Font
。TextLayout(String string, Map<? extends AttributedCharacterIterator.Attribute,?> attributes, FontRenderContext frc)
从一个String
和一个属性集构造一个TextLayout
。TextLayout(AttributedCharacterIterator text, FontRenderContext frc)
从样式文本的迭代器构造一个TextLayout
。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 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
,表示指定边界内指定点的插入符号。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
。
-
-
方法详细信息
-
clone
protected Object clone()
创建一个这个TextLayout
的副本。
-
getJustifiedLayout
public TextLayout getJustifiedLayout(float justificationWidth)
创建这个TextLayout
的副本对齐到指定的宽度。如果这个
TextLayout
已经被证明是正当的,那么抛出异常。 如果此TextLayout
对象的调整率为零,一个TextLayout
相同此TextLayout
被返回。- 参数
-
justificationWidth
- 调整justificationWidth
使用的宽度。 为了获得最佳效果,它不应该与当前的进展情况有太大的不同。 - 结果
-
一个
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
的基线的offsets数组。该数组由
Font
定义的值之一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
间距。 这是在基线相对坐标。领先是从所有glyphvectors的领先,下降和基线计算的
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
的上升,下降,起源或进展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坐标。 - 结果
-
一个
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
是垂直的; 否则为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
- 用于选择强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
- 用于选择强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)
返回一个Shape
,表示指定边界内指定点的插入符号。- 参数
-
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
定义的强和弱插入符号的两个路径。 这些是标准坐标。
-
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
。 - 结果
-
一个封闭黑盒边界的
Shape
。 这是在标准坐标。
-
hitTestChar
public TextHitInfo hitTestChar(float x, float y, Rectangle2D bounds)
返回与指定点对应的TextHitInfo
。 在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
。 遵守equals(Object)
的总合同。- 参数
-
rhs
- 与TextLayout
相比较的TextLayout
- 结果
-
true
如果指定的TextLayout
等于这个TextLayout
。
-
toString
public String toString()
返回此TextLayout
调试信息。
-
draw
public void draw(Graphics2D g2, float x, float y)
- 参数
-
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
-
-