Module  java.desktop
软件包  java.awt.font

Class 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对象( getNextRightHitgetNextLeftHit ,并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处于标准坐标。

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

      • DEFAULT_CARET_POLICY

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

      • TextLayout

        public TextLayout​(String string,
                          Font font,
                          FontRenderContext frc)
        构造一个TextLayoutStringFont 所有文本都使用指定的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的副本。
        重写:
        cloneObject
        结果
        这个实例的一个克隆。
        另请参见:
        Cloneable
      • 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 - FontRenderContextGraphics
        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)
        返回右侧(下)的下一个插入符号的命中; 如果没有这样的命中,返回null 如果命中字符索引超出范围,则抛出IllegalArgumentException
        参数
        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调试信息。
        重写:
        toStringObject
        结果
        textLineTextLayout作为 String
      • draw

        public void draw​(Graphics2D g2,
                         float x,
                         float y)
        这呈现TextLayout在指定的指定位置Graphics2D上下文。 布局的起点位于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