模块  java.desktop
软件包  java.awt.font

Class 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对象( 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 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在标准坐标中。

    另请参见:
    LineBreakMeasurerTextAttributeTextHitInfoLayoutPath
    • 字段详细信息

      • DEFAULT_CARET_POLICY

        public static final TextLayout.CaretPolicy DEFAULT_CARET_POLICY
        当客户端未指定策略时,将使用此CaretPolicy 使用此策略时,对方向与行方向相同的字符的命中比对方向字符的命中要强。 如果角色的方向相同,则角色前缘的击打强于角色后缘的击打。
    • 构造方法详细信息

      • TextLayout

        public TextLayout​(String string,
                          Font font,
                          FontRenderContext frc)
        构造TextLayout来自StringFont 所有文本都使用指定的Font样式Font

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

        参数
        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的副本。
        重写:
        clone在类 Object
        结果
        这个实例的克隆。
        另请参见:
        Cloneable
      • 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 - FontRenderContextGraphics
        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
        结果
        trueTextLayoutTextLayout的; 否则为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)
        返回下一个插入符右侧(底部)的命中; 如果没有这样的命中,则返回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一个角色 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)
        返回 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调试信息。
        重写:
        toString在类 Object
        结果
        textLineTextLayout作为 String
      • 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