JavaTM Platform
Standard Ed. 6

java.awt.font
类 TextLayout

java.lang.Object
  继承者 java.awt.font.TextLayout
所有已实现的接口:
Cloneable

public final class TextLayout
extends Object
implements Cloneable

TextLayout 是样式字符数据的不可变图形表示形式。

它提供以下功能:

TextLayout 对象可以使用其 draw 方法呈现。

可以直接或通过使用 LineBreakMeasurer 构造 TextLayout。直接构造时,源文本表示一个段落。LineBreakMeasurer 允许带样式的文本断行,以适应特定的宽度。有关更多信息,请参阅 LineBreakMeasurer 文档。

TextLayout 的逻辑构造过程如下:

TextLayout 对象的方法返回的所有图形信息都相对于 TextLayout 的原点,它是 TextLayout 对象的基线与其左边缘的交叉点。同样,假定传递到 TextLayout 对象方法的坐标也相对于 TextLayout 对象的原点。客户端通常需要在 TextLayout 对象的坐标系和另一对象(如 Graphics 对象)中的坐标系之间进行转换。

根据样式文本创建 TextLayout 对象,但它们不保留对其源文本的引用。因此,对先前用来生成 TextLayout 文本的改动不会影响 TextLayout

TextLayout 对象的三个方法(getNextRightHitgetNextLeftHithitTestChar)都返回 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 tranlated 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.
 

注:字体旋转可能导致文本基线旋转,多次进行不同的旋转可能够导致基线弯曲或出现 Z 形转角。为了处理好这种(少有的)可能性,需要指定一些 API 返回规格,并采用“相对于基线的坐标中”的参数(比如 ascent 和 advance),以及其他一些“标准坐标中”的规格和参数(比如 getBounds)。相对于基线的坐标中的值将 'x' 坐标映射到沿基线的某段距离处(正 x 表示沿基线的正方向),将 'y' 坐标映射到 'x' 坐标处基线垂直方向的某段距离处(正 y 表示从基线向量顺时针旋转 90 度)。标准坐标中的值是沿 x 轴和 y 轴进行测量的,0,0 是 TextLayout 的原点。用于每个相关 API 的文档都将指示哪些值位于坐标系中。通常,与测量有关的 API 位于与相对于基线的坐标中,而与显示有关的 API 则位于标准坐标中。

另请参见:
LineBreakMeasurer, TextAttribute, TextHitInfo, LayoutPath

嵌套类摘要
static class TextLayout.CaretPolicy
          定义确定强插入符位置的策略。
 
字段摘要
static TextLayout.CaretPolicy DEFAULT_CARET_POLICY
          客户端未指定策略时使用此 CaretPolicy
 
构造方法摘要
TextLayout(AttributedCharacterIterator text, FontRenderContext frc)
          根据样式文本上的迭代器构造一个 TextLayout
TextLayout(String string, Font font, FontRenderContext frc)
          根据 StringFont 构造一个 TextLayout
TextLayout(String string, Map<? extends AttributedCharacterIterator.Attribute,?> attributes, FontRenderContext frc)
          根据 String 和属性集构造一个 TextLayout
 
方法摘要
protected  Object clone()
          创建此 TextLayout 的副本。
 void draw(Graphics2D g2, float x, float y)
          在指定的 Graphics2D 上下文中的指定位置上呈现此 TextLayout
 boolean equals(Object obj)
          如果指定 Object 是一个 TextLayout 对象,且指定的 Object 等于此 TextLayout,则返回 true
 boolean equals(TextLayout rhs)
          如果两个布局相等,则返回 true
 float getAdvance()
          返回此 TextLayout 的 advance。
 float getAscent()
          返回此 TextLayout 的 ascent。
 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)
          返回表示此 TextLayout 的自然边界中指定目标字符处插入符的 Shape
 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 的 descent。
 TextLayout getJustifiedLayout(float justificationWidth)
          创建调整到指定宽度的此 TextLayout 的一个副本。
 LayoutPath getLayoutPath()
          返回 LayoutPath,如果布局路径是默认路径(x 映射到 advance,y 映射到 offset),则返回 null。
 float getLeading()
          返回 TextLayout 的行距。
 Shape getLogicalHighlightShape(int firstEndpoint, int secondEndpoint)
          返回封装指定范围中逻辑选择范围的 Shape,它扩展到此 TextLayout 的自然边界。
 Shape getLogicalHighlightShape(int firstEndpoint, int secondEndpoint, Rectangle2D bounds)
          返回封闭指定范围中扩展到指定 bounds 的逻辑选择范围的 Shape
 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)
          返回表示此 TextLayout 的轮廓的 Shape
 Rectangle getPixelBounds(FontRenderContext frc, float x, float y)
          返回在图形中使用给定 FontRenderContext 在给定位置处呈现 TextLayout 时的像素边界。
 float getVisibleAdvance()
          返回此 TextLayout 的 advance,减去结尾空格。
 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)
          调整此布局。
 int hashCode()
          返回此 TextLayout 的哈希码。
 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 的基本方向是从左到右,则返回 true;如果基本方向是从右到左,则返回 false
 boolean isVertical()
          如果此 TextLayout 是垂直的,则返回 true
 String toString()
          返回此 TextLayout 的调试信息。
 
从类 java.lang.Object 继承的方法
finalize, getClass, notify, notifyAll, wait, wait, wait
 

字段详细信息

DEFAULT_CARET_POLICY

public static final TextLayout.CaretPolicy DEFAULT_CARET_POLICY
客户端未指定策略时使用此 CaretPolicy。使用此策略,方向与行方向相同的字符的命中要强于对反方向字符的命中。如果字符的方向相同,则对字符开始边的命中要强于对字符结尾边的命中。

构造方法详细信息

TextLayout

public TextLayout(String string,
                  Font font,
                  FontRenderContext frc)
根据 StringFont 构造一个 TextLayout。使用指定的 Font 样式化所有文本。

String 必须指定单个文本段,因为双向算法需要整个段落。

参数:
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

public TextLayout(AttributedCharacterIterator text,
                  FontRenderContext frc)
根据样式文本上的迭代器构造一个 TextLayout

该迭代器必须指定单个文本段,因为双向算法需要整个段落。

参数:
text - 要显示的样式文本
frc - 包含关于正确测量文本所需图形设备的信息。根据设备分辨率和属性(如抗锯齿)的不同,文本测量可能稍有变化。此参数未指定 TextLayout 和用户空间之间的转换。
方法详细信息

clone

protected Object clone()
创建此 TextLayout 的副本。

覆盖:
Object 中的 clone
返回:
此实例的一个副本。
另请参见:
Cloneable

getJustifiedLayout

public TextLayout getJustifiedLayout(float justificationWidth)
创建调整到指定宽度的此 TextLayout 的一个副本。

如果已调整了此 TextLayout,则抛出异常。如果此 TextLayout 对象的调整率为零,将返回与此 TextLayout 相同的 TextLayout

参数:
justificationWidth - 调整行时使用的宽度。要获得最佳结果,该宽度与行的当前 advance 不应有太大差别。
返回:
调整到指定宽度的 TextLayout
抛出:
Error - 如果已调整了此布局,则抛出 Error。

handleJustify

protected void handleJustify(float justificationWidth)
调整此布局。子类重写该方法来控制调整(如果存在子类,即……)。 只在段落属性(来自源文本,可以是布局属性的默认值)指示一个非零调整率时才调整布局。将文本调整到指示的宽度。当前实现还调整标点和尾部空白,使其接近于调整宽度。调整布局之后将不会对其进行再调整。

某些代码依赖于布局的不可变性。因此子类不应直接调用该方法,而应调用 getJustifiedLayout,getJustifiedLayout 将在此布局的副本上调用此方法,并保留原始布局。

参数:
justificationWidth - 调整行时使用的宽度。要获得最佳结果,该宽度与行的当前 advance 不应有太大差别。
另请参见:
getJustifiedLayout(float)

getBaseline

public byte getBaseline()
返回此 TextLayout 的基线。基线是 Font 中定义的一个值,它可以是 roman、centered 或 hanging。Ascent 和 descent 相对于此基线。baselineOffsets 也相对于此基线。

返回:
TextLayout 的基线。
另请参见:
getBaselineOffsets(), Font

getBaselineOffsets

public float[] getBaselineOffsets()
返回用于此 TextLayout 的基线偏移量数组。

该数组用 Font 中定义的 roman、centered 或 hanging 值之一进行索引。这些值相对于此 TextLayout 对象的基线,从而 getBaselineOffsets[getBaseline()] == 0。将偏移量添加到 TextLayout 对象基线所在的位置,以获取新基线的位置。

返回:
包含用于此 TextLayout 基线的偏移量数组。
另请参见:
getBaseline(), Font

getAdvance

public float getAdvance()
返回此 TextLayout 的 advance。该 advance 是从原点到最右边(最底部)字符的 advance 的距离。返回值位于相对于基线的坐标中。

返回:
TextLayout 的 advance。

getVisibleAdvance

public float getVisibleAdvance()
返回此 TextLayout 的 advance,减去结尾空格。返回值位于相对于基线的坐标中。

返回:
TextLayout 的 advance,不包括结尾的空格。
另请参见:
getAdvance()

getAscent

public float getAscent()
返回此 TextLayout 的 ascent。ascent 是从 TextLayout 的顶端(右端)到基线的距离。它始终为正数或零。ascent 足以容纳上标文本,它是每个字形的 ascent、偏移量和基线总和的最大值。该 ascent 是 TextLayout 中所有文本基线的最大 ascent。返回值位于相对于基线的坐标中。

返回:
TextLayout 的 ascent。

getDescent

public float getDescent()
返回此 TextLayout 的 descent。descent 是从基线到 TextLayout 底部(左端)的距离。它始终为正数或零。descent 足以容纳下标文本,它是每个字形的 descent、偏移量和基线总和的最大值。该 ascent 是 TextLayout 中所有文本基线的最大 descent。返回值位于相对于基线的坐标中。

返回:
TextLayout 的 descent。

getLeading

public float getLeading()
返回 TextLayout 的行距。行距是此 TextLayout 的建议行间距。返回值位于相对于基线的坐标中。

行距通过 TextLayout 中所有字形向量的行距、descent 和基线计算。算法大致如下:

 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 的 ascent、descent、origin 或 advance 并不完全一致。

返回:
作为此 TextLayout 边界的 Rectangle2D

getPixelBounds

public Rectangle getPixelBounds(FontRenderContext frc,
                                float x,
                                float y)
返回在图形中使用给定 FontRenderContext 在给定位置处呈现 TextLayout 时的像素边界。图形呈现上下文不必与用来创建此 TextLayoutFontRenderContext 相同,并且可以为 null。如果为 null,则使用此 TextLayoutFontRenderContext

参数:
frc - GraphicsFontRenderContext
x - 呈现此 TextLayout 处的 x 坐标。
y - 呈现此 TextLayout 处的 y 坐标。
返回:
封装受影响像素的 Rectangle
从以下版本开始:
1.6
另请参见:
GlyphVector.getPixelBounds(java.awt.font.FontRenderContext, float, float)

isLeftToRight

public boolean isLeftToRight()
如果此 TextLayout 的基本方向是从左到右,则返回 true;如果基本方向是从右到左,则返回 falseTextLayout 的基本方向是从左到右 (LTR) 或从右到左 (RTL)。基本方向与行中文本的实际方向无关,实际方向可以是 LTR、RTL 或混向。默认情况下,从左到右布局按左对齐来定位。如果布局在制表行上进行,那么制表符将从左到右,从而逻辑连续布局的定位将从左到右。对于 RTL 布局则相反。默认情况下,它们是按左对齐来定位的,制表符将从右到左。

返回:
如果此 TextLayout 的基本方向是从左到右,则返回 true;否则返回 false

isVertical

public boolean isVertical()
如果此 TextLayout 是垂直的,则返回 true

返回:
如果此 TextLayout 是垂直的,则返回 true;否则返回 false

getCharacterCount

public int getCharacterCount()
返回由此 TextLayout 表示的字符数。

返回:
TextLayout 中的字符数。

getCaretInfo

public float[] getCaretInfo(TextHitInfo hit,
                            Rectangle2D bounds)
返回与对应于 hit 的插入符有关的信息。数组的第一个元素是插入符与基线的交集,它是沿基线的一段距离。数组的第二个元素是插入符的反斜面(排列/上升),它是根据位于该点的基线进行测量的。

此方法仅用于获取信息。要显示插入符,最好使用 getCaretShapes

参数:
hit - 此 TextLayout 中的目标字符
bounds - 构造插入符位置的边界。这些边界位于相对于基线的坐标中。
返回:
包含插入符位置和斜面的两元素数组。返回的插入符信息位于相对于基线的坐标中。
另请参见:
getCaretShapes(int, Rectangle2D, TextLayout.CaretPolicy), Font.getItalicAngle()

getCaretInfo

public float[] getCaretInfo(TextHitInfo hit)
返回与对应于 hit 的插入符有关的信息。此方法是 getCaretInfo 的便捷用法,它使用了此 TextLayout 的自然边界。

参数:
hit - 此 TextLayout 中的目标字符
返回:
有关对应于目标字符的插入符的信息。返回的插入符信息位于相对于基线的坐标中。

getNextRightHit

public TextHitInfo getNextRightHit(TextHitInfo hit)
返回下一个插入符右侧(底部)的目标字符;如果没有这样的字符,则返回 null。如果目标字符索引超出范围,则抛出 IllegalArgumentException

参数:
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 中的目标字符。
返回:
插入符显示在所提供目标字符的插入符左侧(顶部)下一个位置的目标字符,或者返回 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)
返回表示指定边界内指定目标字符处插入符的 Shape

参数:
hit - 生成插入符处的目标字符
bounds - 用于生成插入符的 TextLayout 的边界。这些边界位于相对于基线的坐标中。
返回:
表示插入符的 Shape。返回的形状位于标准坐标中。

getCaretShape

public Shape getCaretShape(TextHitInfo hit)
返回表示此 TextLayout 的自然边界中指定目标字符处插入符的 Shape

参数:
hit - 生成插入符处的目标字符
返回:
表示插入符的 Shape。返回的形状位于标准坐标中。

getCharacterLevel

public byte getCharacterLevel(int index)
返回 index 处字符的级别。索引 -1 和 characterCount 被分配为此 TextLayout 的基本级别。

参数:
index - 可获取级别的字符索引
返回:
指定 index 处字符的级别。

getCaretShapes

public Shape[] getCaretShapes(int offset,
                              Rectangle2D bounds,
                              TextLayout.CaretPolicy policy)
返回对应于强插入符和弱插入符的两条路径。

参数:
offset - 此 TextLayout 中的偏移量
bounds - 插入符扩展到的边界。这些边界位于相对于基线的坐标中。
policy - 指定的 CaretPolicy
返回:
包含两条路径的数组。元素零是强插入符。如果有两个插入符,则元素 1 为弱插入符,否则为 null。返回的形状位于标准坐标中。

getCaretShapes

public Shape[] getCaretShapes(int offset,
                              Rectangle2D bounds)
返回对应于强插入符和弱插入符的两条路径。此方法是使用默认插入符策略的 getCaretShapes 的便捷用法。

参数:
offset - 此 TextLayout 中的偏移量
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)
返回封闭指定范围中扩展到指定 bounds 的逻辑选择范围的 Shape

如果选择范围包括第一个逻辑字符,那么它将扩展到此 TextLayout 的起点之前的 bounds 部分。如果该范围包括最后的逻辑字符,那么它将扩展到此 TextLayout 的结束点之后的 bounds 部分。选择范围的高度(垂直行上的宽度)始终扩展到 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 的边界。此边界位于相对于基线的坐标中。
返回:
描述指定点处字符和边缘(开始边或结尾边)的 TextHitInfo。

hitTestChar

public TextHitInfo hitTestChar(float x,
                               float y)
返回对应于指定点的 TextHitInfo。此方法是 hitTestChar 的便捷用法,后者使用了此 TextLayout 的自然边界。

参数:
x - 距离此 TextLayout 原点的 x 偏移量。此偏移量位于标准坐标中。
y - 距离此 TextLayout 原点的 y 偏移量。此偏移量位于标准坐标中。
返回:
描述指定点下字符和边缘(开始边或结尾边)的 TextHitInfo。

hashCode

public int hashCode()
返回此 TextLayout 的哈希码。

覆盖:
Object 中的 hashCode
返回:
TextLayout 的哈希码。
另请参见:
Object.equals(java.lang.Object), Hashtable

equals

public boolean equals(Object obj)
如果指定 Object 是一个 TextLayout 对象,且指定的 Object 等于此 TextLayout,则返回 true

覆盖:
Object 中的 equals
参数:
obj - 用于测试相等性的 Object
返回:
如果指定的 Object 等于此 TextLayout,则返回 true;否则返回 false
另请参见:
Object.hashCode(), Hashtable

equals

public boolean equals(TextLayout rhs)
如果两个布局相等,则返回 true。如果两个布局包含具有相同顺序的相等字形向量,则这两个布局相等。

参数:
rhs - 要与此 TextLayout 进行比较的 TextLayout
返回:
如果指定的 TextLayout 等于此 TextLayout,则返回 true

toString

public String toString()
返回此 TextLayout 的调试信息。

覆盖:
Object 中的 toString
返回:
TextLayoutString 形式的 textLine

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)
返回表示此 TextLayout 的轮廓的 Shape

参数:
tx - 应用于此 TextLayout 轮廓的可选 AffineTransform
返回:
TextLayout 的轮廓的 Shape。此形状位于标准坐标中。

getLayoutPath

public LayoutPath getLayoutPath()
返回 LayoutPath,如果布局路径是默认路径(x 映射到 advance,y 映射到 offset),则返回 null。

返回:
布局路径
从以下版本开始:
1.6

hitToPoint

public void hitToPoint(TextHitInfo hit,
                       Point2D point)
将一个命中点转换为标准坐标中的一个点。该点在字符的基线上,在适当的情况下,它可以位于字符的开始边或结尾边上。如果路径在通过命中表示的字符边上断开,那么该点将与此字符相邻。

参数:
hit - 命中检查。此参数必须是 TextLayout 上的一次有效命中。
point - 返回的点。此点位于标准坐标中。
抛出:
IllegalArgumentException - 如果 hit 对于 TextLayout 无效。
NullPointerException - 如果 hit 或 point 为 null。
从以下版本开始:
1.6

JavaTM Platform
Standard Ed. 6

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策