| 
 | JavaTM 2 Platform Standard Ed. 6 | |||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
java.lang.Objectjava.awt.font.TextLayout
public final class TextLayout
TextLayout 是样式字符数据的不可变图形表示形式。
 
它提供以下功能:
TextLayout 对象可以使用其 draw 方法呈现。
 
可以直接或通过使用 LineBreakMeasurer 构造 TextLayout。直接构造时,源文本表示一个段落。LineBreakMeasurer 允许带样式的文本断行,以适应特定的宽度。有关更多信息,请参阅 LineBreakMeasurer 文档。
 
TextLayout 的逻辑构造过程如下:
 
TextAttribute.FONT 属性,则首先使用该字体,否则,通过使用已定义的属性计算默认字体
从 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 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)根据 String和Font构造一个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 | 
| 字段详细信息 | 
|---|
public static final TextLayout.CaretPolicy DEFAULT_CARET_POLICY
CaretPolicy。使用此策略,方向与行方向相同的字符的命中要强于对反方向字符的命中。如果字符的方向相同,则对字符开始边的命中要强于对字符结尾边的命中。
| 构造方法详细信息 | 
|---|
public TextLayout(String string,
                  Font font,
                  FontRenderContext frc)
String 和 Font 构造一个 TextLayout。使用指定的 Font 样式化所有文本。
 
String 必须指定单个文本段,因为双向算法需要整个段落。
string - 要显示的文本font - 用于样式化文本的 Fontfrc - 包含关于正确测量文本所需图形设备的信息。根据设备分辨率和属性(如抗锯齿)的不同,文本测量可能稍有变化。此参数未指定 TextLayout 和用户空间之间的转换。
public TextLayout(String string,
                  Map<? extends AttributedCharacterIterator.Attribute,?> attributes,
                  FontRenderContext frc)
String 和属性集构造一个 TextLayout。
 使用提供的属性样式化所有文本。
String 必须指定单个文本段,因为双向算法需要整个段落。
string - 要显示的文本attributes - 用于样式化文本的属性frc - 包含关于正确测量文本所需图形设备的信息。根据设备分辨率和属性(如抗锯齿)的不同,文本测量可能稍有变化。此参数未指定 TextLayout 和用户空间之间的转换。
public TextLayout(AttributedCharacterIterator text,
                  FontRenderContext frc)
TextLayout。
 该迭代器必须指定单个文本段,因为双向算法需要整个段落。
text - 要显示的样式文本frc - 包含关于正确测量文本所需图形设备的信息。根据设备分辨率和属性(如抗锯齿)的不同,文本测量可能稍有变化。此参数未指定 TextLayout 和用户空间之间的转换。| 方法详细信息 | 
|---|
protected Object clone()
TextLayout 的副本。
Object 中的 cloneCloneablepublic TextLayout getJustifiedLayout(float justificationWidth)
TextLayout 的一个副本。
 
如果已调整了此 TextLayout,则抛出异常。如果此 TextLayout 对象的调整率为零,将返回与此 TextLayout 相同的 TextLayout。
justificationWidth - 调整行时使用的宽度。要获得最佳结果,该宽度与行的当前 advance 不应有太大差别。
TextLayout。
Error - 如果已调整了此布局,则抛出 Error。protected void handleJustify(float justificationWidth)
某些代码依赖于布局的不可变性。因此子类不应直接调用该方法,而应调用 getJustifiedLayout,getJustifiedLayout 将在此布局的副本上调用此方法,并保留原始布局。
justificationWidth - 调整行时使用的宽度。要获得最佳结果,该宽度与行的当前 advance 不应有太大差别。getJustifiedLayout(float)public byte getBaseline()
TextLayout 的基线。基线是 Font 中定义的一个值,它可以是 roman、centered 或 hanging。Ascent 和 descent 相对于此基线。baselineOffsets 也相对于此基线。
TextLayout 的基线。getBaselineOffsets(), 
Fontpublic float[] getBaselineOffsets()
TextLayout 的基线偏移量数组。
 
该数组用 Font 中定义的 roman、centered 或 hanging 值之一进行索引。这些值相对于此 TextLayout 对象的基线,从而 getBaselineOffsets[getBaseline()] == 0。将偏移量添加到 TextLayout 对象基线所在的位置,以获取新基线的位置。
TextLayout 基线的偏移量数组。getBaseline(), 
Fontpublic float getAdvance()
TextLayout 的 advance。该 advance 是从原点到最右边(最底部)字符的 advance 的距离。返回值位于相对于基线的坐标中。
TextLayout 的 advance。public float getVisibleAdvance()
TextLayout 的 advance,减去结尾空格。返回值位于相对于基线的坐标中。
TextLayout 的 advance,不包括结尾的空格。getAdvance()public float getAscent()
TextLayout 的 ascent。ascent 是从 TextLayout 的顶端(右端)到基线的距离。它始终为正数或零。ascent 足以容纳上标文本,它是每个字形的 ascent、偏移量和基线总和的最大值。该 ascent 是 TextLayout 中所有文本基线的最大 ascent。返回值位于相对于基线的坐标中。
TextLayout 的 ascent。public float getDescent()
TextLayout 的 descent。descent 是从基线到 TextLayout 底部(左端)的距离。它始终为正数或零。descent 足以容纳下标文本,它是每个字形的 descent、偏移量和基线总和的最大值。该 ascent 是 TextLayout 中所有文本基线的最大 descent。返回值位于相对于基线的坐标中。
TextLayout 的 descent。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 的行距。public Rectangle2D getBounds()
TextLayout 的边界。这些边界位于标准坐标中。因为光栅化效果,这些边界可能没有封装 TextLayout 呈现的所有像素。它可能与 TextLayout 的 ascent、descent、origin 或 advance 并不完全一致。
TextLayout 边界的 Rectangle2D。
public Rectangle getPixelBounds(FontRenderContext frc,
                                float x,
                                float y)
FontRenderContext 在给定位置处呈现 TextLayout 时的像素边界。图形呈现上下文不必与用来创建此 TextLayout 的 FontRenderContext 相同,并且可以为 null。如果为 null,则使用此 TextLayout 的 FontRenderContext。
frc - Graphics 的 FontRenderContext。x - 呈现此 TextLayout 处的 x 坐标。y - 呈现此 TextLayout 处的 y 坐标。
Rectangle。GlyphVector.getPixelBounds(java.awt.font.FontRenderContext, float, float)public boolean isLeftToRight()
TextLayout 的基本方向是从左到右,则返回 true;如果基本方向是从右到左,则返回 false。TextLayout  的基本方向是从左到右 (LTR) 或从右到左 (RTL)。基本方向与行中文本的实际方向无关,实际方向可以是 LTR、RTL 或混向。默认情况下,从左到右布局按左对齐来定位。如果布局在制表行上进行,那么制表符将从左到右,从而逻辑连续布局的定位将从左到右。对于 RTL 布局则相反。默认情况下,它们是按左对齐来定位的,制表符将从右到左。
TextLayout 的基本方向是从左到右,则返回 true;否则返回 false。public boolean isVertical()
TextLayout 是垂直的,则返回 true。
TextLayout 是垂直的,则返回 true;否则返回 false。public int getCharacterCount()
TextLayout 表示的字符数。
TextLayout 中的字符数。
public float[] getCaretInfo(TextHitInfo hit,
                            Rectangle2D bounds)
hit 的插入符有关的信息。数组的第一个元素是插入符与基线的交集,它是沿基线的一段距离。数组的第二个元素是插入符的反斜面(排列/上升),它是根据位于该点的基线进行测量的。
 
此方法仅用于获取信息。要显示插入符,最好使用 getCaretShapes。
hit - 此 TextLayout 中的目标字符bounds - 构造插入符位置的边界。这些边界位于相对于基线的坐标中。
getCaretShapes(int, Rectangle2D, TextLayout.CaretPolicy), 
Font.getItalicAngle()public float[] getCaretInfo(TextHitInfo hit)
hit 的插入符有关的信息。此方法是 getCaretInfo 的便捷用法,它使用了此 TextLayout 的自然边界。
hit - 此 TextLayout 中的目标字符
public TextHitInfo getNextRightHit(TextHitInfo hit)
null。如果目标字符索引超出范围,则抛出 IllegalArgumentException。
hit - 此布局中的目标字符
null。
public TextHitInfo getNextRightHit(int offset,
                                   TextLayout.CaretPolicy policy)
null。目标字符位于指定偏移量处根据指定策略确定的强插入符右侧。返回的目标字符是根据指定策略确定的两个可能目标字符中较强的一个。
offset - 此 TextLayout 中的插入偏移量。不能小于 0 或大于此 TextLayout 对象的字符计数。policy - 用来选择强插入符的策略
null。public TextHitInfo getNextRightHit(int offset)
null。目标字符位于指定偏移量处根据默认策略确定的强插入符右侧。返回的目标字符是根据默认策略确定的两个可能目标字符中较强的一个。
offset - 此 TextLayout 中的插入偏移量。不能小于 0 或大于该 TextLayout 对象的字符计数。
null。public TextHitInfo getNextLeftHit(TextHitInfo hit)
null。如果目标字符索引超出范围,则抛出 IllegalArgumentException。
hit - 此 TextLayout 中的目标字符。
null。
public TextHitInfo getNextLeftHit(int offset,
                                  TextLayout.CaretPolicy policy)
null。目标字符位于指定偏移量处根据指定策略确定的强插入符左侧。返回的目标字符是根据指定策略确定的两个可能目标字符中较强的一个。
offset - 此 TextLayout 中的插入偏移量。不能小于 0 或大于此 TextLayout 对象的字符计数。policy - 用来选择强插入符的策略
null。public TextHitInfo getNextLeftHit(int offset)
null。目标字符位于指定偏移量处根据默认策略确定的强插入符左侧。返回的目标字符是根据默认策略确定的两个可能目标字符中较强的一个。
offset - 此 TextLayout 中的插入偏移量。不能小于 0 或大于此 TextLayout 对象的字符计数。
null。public TextHitInfo getVisualOtherHit(TextHitInfo hit)
hit - 指定的目标字符
public Shape getCaretShape(TextHitInfo hit,
                           Rectangle2D bounds)
Shape。
hit - 生成插入符处的目标字符bounds - 用于生成插入符的 TextLayout 的边界。这些边界位于相对于基线的坐标中。
Shape。返回的形状位于标准坐标中。public Shape getCaretShape(TextHitInfo hit)
TextLayout 的自然边界中指定目标字符处插入符的 Shape。
hit - 生成插入符处的目标字符
Shape。返回的形状位于标准坐标中。public byte getCharacterLevel(int index)
index 处字符的级别。索引 -1 和 characterCount 被分配为此 TextLayout 的基本级别。
index - 可获取级别的字符索引
public Shape[] getCaretShapes(int offset,
                              Rectangle2D bounds,
                              TextLayout.CaretPolicy policy)
offset - 此 TextLayout 中的偏移量bounds - 插入符扩展到的边界。这些边界位于相对于基线的坐标中。policy - 指定的 CaretPolicy
null。返回的形状位于标准坐标中。
public Shape[] getCaretShapes(int offset,
                              Rectangle2D bounds)
getCaretShapes 的便捷用法。
offset - 此 TextLayout 中的偏移量bounds - 插入符扩展到的边界。此边界位于相对于基线的坐标中。
DEFAULT_CARET_POLICY 定义的强插入符和弱插入符的两条路径。这些路径位于标准坐标中。public Shape[] getCaretShapes(int offset)
getCaretShapes 的便捷用法,后者使用默认插入符策略和此 TextLayout 对象的自然边界。
offset - 此 TextLayout 中的偏移量
DEFAULT_CARET_POLICY 定义的强插入符和弱插入符的两条路径。这两条路径位于标准坐标中。
public int[] getLogicalRangesForVisualSelection(TextHitInfo firstEndpoint,
                                                TextHitInfo secondEndpoint)
firstEndpoint - 可视范围的端点secondEndpoint - 可视范围的另一个端点。此端点可以小于 firstEndpoint。
getVisualHighlightShape(TextHitInfo, TextHitInfo, Rectangle2D)
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)
public Shape getVisualHighlightShape(TextHitInfo firstEndpoint,
                                     TextHitInfo secondEndpoint)
Shape。此方法是 getVisualHighlightShape 的便捷用法,后者使用了此 TextLayout 的自然边界。
firstEndpoint - 可视选择范围的端点secondEndpoint - 可视选择范围的另一个端点
Shape。此形状位于标准坐标中。
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)
public Shape getLogicalHighlightShape(int firstEndpoint,
                                      int secondEndpoint)
Shape,它扩展到此 TextLayout 的自然边界。此方法是 getLogicalHighlightShape 的便捷用法,后者使用了此 TextLayout 的自然边界。
firstEndpoint - 选择的字符范围的端点secondEndpoint - 选择的字符范围的另一个端点。可以小于 firstEndpoint。此范围包括 min(firstEndpoint, secondEndpoint) 处的字符,但不包括 max(firstEndpoint, secondEndpoint) 处的字符。
Shape。 此形状位于标准坐标中。
public Shape getBlackBoxBounds(int firstEndpoint,
                               int secondEndpoint)
firstEndpoint - 字符范围的端点secondEndpoint - 字符范围的另一个端点。可以小于 firstEndpoint。
Shape。此形状位于标准坐标中。
public TextHitInfo hitTestChar(float x,
                               float y,
                               Rectangle2D bounds)
TextHitInfo。将 TextLayout 边界之外的坐标映射到第一个逻辑字符开始边上的点,或映射到最后一个逻辑字符结束边上的点(如果合适),而不考虑该字符在行中的位置。该方法只使用基线方向。
x - 距离此 TextLayout 原点的 x 偏移量。此偏移量位于标准坐标中。y - 距离此 TextLayout 原点的 y 偏移量。此偏移量位于标准坐标中。bounds - TextLayout 的边界。此边界位于相对于基线的坐标中。
public TextHitInfo hitTestChar(float x,
                               float y)
TextHitInfo。此方法是 hitTestChar 的便捷用法,后者使用了此 TextLayout 的自然边界。
x - 距离此 TextLayout 原点的 x 偏移量。此偏移量位于标准坐标中。y - 距离此 TextLayout 原点的 y 偏移量。此偏移量位于标准坐标中。
public int hashCode()
TextLayout 的哈希码。
Object 中的 hashCodeTextLayout 的哈希码。Object.equals(java.lang.Object), 
Hashtablepublic boolean equals(Object obj)
Object 是一个 TextLayout 对象,且指定的 Object 等于此 TextLayout,则返回 true。
Object 中的 equalsobj - 用于测试相等性的 Object
Object 等于此 TextLayout,则返回 true;否则返回 false。Object.hashCode(), 
Hashtablepublic boolean equals(TextLayout rhs)
true。如果两个布局包含具有相同顺序的相等字形向量,则这两个布局相等。
rhs - 要与此 TextLayout 进行比较的 TextLayout
TextLayout 等于此 TextLayout,则返回 true。public String toString()
TextLayout 的调试信息。
Object 中的 toStringTextLayout 的 String 形式的 textLine
public void draw(Graphics2D g2,
                 float x,
                 float y)
Graphics2D 上下文中的指定位置上呈现此 TextLayout。布局的原点置于 x, y。呈现可能涉及此位置的 getBounds() 中的任何点。此方法不改变 g2。文本是沿着基线路径呈现的。
g2 - 呈现布局的 Graphics2D 上下文x - 此 TextLayout 的 X 坐标y - 此 TextLayout 的 Y 坐标getBounds()public Shape getOutline(AffineTransform tx)
TextLayout 的轮廓的 Shape。
tx - 应用于此 TextLayout 轮廓的可选 AffineTransform。
TextLayout 的轮廓的 Shape。此形状位于标准坐标中。public LayoutPath getLayoutPath()
public void hitToPoint(TextHitInfo hit,
                       Point2D point)
hit - 命中检查。此参数必须是 TextLayout 上的一次有效命中。point - 返回的点。此点位于标准坐标中。
IllegalArgumentException - 如果 hit 对于 TextLayout 无效。
NullPointerException - 如果 hit 或 point 为 null。| 
 | JavaTM 2 Platform Standard Ed. 6 | |||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
版权所有 2008 Sun Microsystems, Inc. 保留所有权利。请遵守GNU General Public License, version 2 only。