モジュール java.desktop
パッケージ java.awt.font

クラスTextLayout

java.lang.Object
java.awt.font.TextLayout
すべての実装されたインタフェース:
Cloneable

public final class TextLayout
extends Object
implements Cloneable
TextLayoutは、書式付き文字データの不変のグラフィック表現です。

このクラスは次の機能を提供します。

  • 暗黙的な双方向の分析と並べ替え
  • カーソルの位置指定と移動(混合方向テキストのための分割カーソルを含む)
  • ハイライト(混合方向テキストのための論理的ハイライトと視覚的ハイライトを含む)
  • 複数のベースライン(ローマン・ベースライン、ぶら下がりベースライン、およびセンター・ベースライン)
  • ヒットのテスト
  • 位置揃え
  • デフォルト・フォントの置換
  • アセント、ディセント、および有効幅などのメトリック情報
  • 描画

TextLayoutオブジェクトは、drawメソッドを使用して描画できます。

TextLayoutは、直接またはLineBreakMeasurerを介して作成できます。 直接作成される場合、ソース・テキストは1つの段落を表します。 LineBreakMeasurerでは、特定の幅に収まる複数の行に書式付きテキストを分割できます。 詳細は、LineBreakMeasurerのドキュメントを参照してください。

TextLayoutの構築は、論理的には次の順序で行われます。

  • 段落属性が抽出され、調べられる
  • 双方向の並べ替えのためにテキストが分析され、必要な場合は並べ替え情報が計算される
  • テキストがスタイル・ランにセグメント化される
  • スタイル・ラン用のフォントが選択される。選択方法は、最初に属性TextAttribute.FONTがある場合はフォントが使用され、そうでない場合は、定義済みの属性を使用してデフォルト・フォントが計算される
  • テキストが複数のベースラインにある場合、ランまたはサブランは共通のベースラインを共有するサブランにさらに分割される
  • 選択されたフォントを使用して各ランにグリフ・ベクトルが生成される
  • 最終的な双方向の並べ替えがグリフ・ベクトルで実行される

TextLayoutオブジェクトのメソッドから返されるすべてのグラフィック情報は、TextLayoutオブジェクトのベースラインと左端の交点であるTextLayoutの原点を基準にしています。 また、TextLayoutオブジェクトのメソッドに渡される座標は、TextLayoutオブジェクトの原点を基準にしているものと見なされます。 通常、クライアントは、TextLayoutオブジェクトの座標系と別のオブジェクト(Graphicsオブジェクトなど)の座標系との間で変換が必要になります。

TextLayoutオブジェクトは、書式付きテキストから構築されますが、ソース・テキストへの参照は保持しません。 このため、TextLayoutを生成するために使用されたテキストにその後変更が加えられても、TextLayoutに影響はありません。

TextLayoutオブジェクトの3つのメソッド(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度の方向)にマップされます。 標準の座標では、座標はTextLayoutの原点を0,0として、x軸およびy軸に沿って測定されます。 関連する各APIのドキュメントには、どの値がどの座標系で表されるかが示されています。 一般に、測定に関連するAPIはベースラインを基準にした座標、表示に関連するAPIは標準の座標を使用します。

関連項目:
LineBreakMeasurer, TextAttribute, TextHitInfo, LayoutPath
  • ネストされたクラスのサマリー

    ネストされたクラス
    修飾子と型 クラス 説明
    static class  TextLayout.CaretPolicy
    強いキャレットの場所を決定するポリシーを定義します。
  • フィールドのサマリー

    フィールド
    修飾子と型 フィールド 説明
    static TextLayout.CaretPolicy DEFAULT_CARET_POLICY
    このCaretPolicyは、ポリシーがクライアントによって指定されていない場合に使用されます。
  • コンストラクタのサマリー

    コンストラクタ
    コンストラクタ 説明
    TextLayout​(String string, Font font, FontRenderContext frc)
    StringおよびFontからTextLayoutを構築します。
    TextLayout​(String string, Map<? extends AttributedCharacterIterator.Attribute,​?> attributes, FontRenderContext frc)
    Stringおよび属性セットからTextLayoutを構築します。
    TextLayout​(AttributedCharacterIterator text, FontRenderContext frc)
    書式付きテキストのイテレータからTextLayoutを構築します。
  • メソッドのサマリー

    修飾子と型 メソッド 説明
    protected Object clone()
    このTextLayoutのコピーを作成します。
    void draw​(Graphics2D g2, float x, float y)
    指定されたGraphics2Dコンテキストの指定された位置にこのTextLayoutを描画します。
    boolean equals​(TextLayout rhs)
    2つのレイアウトが等しい場合に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)
    このTextLayoutの自然境界内の指定されたヒットにあるキャレットを表すShapeを返します。
    Shape getCaretShape​(TextHitInfo hit, Rectangle2D bounds)
    指定された境界内の指定されたヒットにあるキャレットを表すShapeを返します。
    Shape[] getCaretShapes​(int offset)
    強いキャレットと弱いキャレットに対応する2つの輪郭線を返します。
    Shape[] getCaretShapes​(int offset, Rectangle2D bounds)
    強いキャレットと弱いキャレットに対応する2つの輪郭線を返します。
    Shape[] getCaretShapes​(int offset, Rectangle2D bounds, TextLayout.CaretPolicy policy)
    強いキャレットと弱いキャレットに対応する2つの輪郭線を返します。
    int getCharacterCount()
    このTextLayoutが表す文字数を返します。
    byte getCharacterLevel​(int index)
    indexにある文字のレベルを返します。
    float getDescent()
    このTextLayoutのディセントを返します。
    TextLayout getJustifiedLayout​(float justificationWidth)
    指定された幅に行揃えされた、このTextLayoutのコピーを作成します。
    LayoutPath getLayoutPath()
    LayoutPathを返します。レイアウト・パスがデフォルトのパスである場合は(xが有効幅、yがオフセットにマップされます)、nullを返します。
    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)
    このTextLayoutの輪郭を表すShapeを返します。
    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のベースとなる方向が左から右の場合にtrueを返し、右から左の場合にfalseを返します。
    boolean isVertical()
    このTextLayoutが垂直の場合にtrueを返します。
    String toString()
    このTextLayoutのデバッグ情報を返します。

    クラス java.lang.Objectで宣言されたメソッド

    equals, finalize, getClass, hashCode, 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)
      StringおよびFontからTextLayoutを構築します。 すべてのテキストは、指定されたFontを使用して書式が設定されます。

      Stringには、1段落のテキストを指定する必要があります。双方向アルゴリズムでは、段落全体が要求されるからです。

      パラメータ:
      string - 表示するテキスト
      font - テキストの書式を設定するために使用されるFont
      frc - テキストを正確に測定するために必要なグラフィックス・デバイスに関する情報を格納する。 テキスト測定は、デバイスの解像度によりわずかに異なることがあり、アンチエイリアスなどの属性によっても異なることがある。 このパラメータは、TextLayoutとユーザー空間の間の変換は指定しない。
    • TextLayout

      public TextLayout​(String string, Map<? extends AttributedCharacterIterator.Attribute,​?> attributes, FontRenderContext frc)
      Stringおよび属性セットからTextLayoutを構築します。

      すべてのテキストは、指定された属性により書式が設定されます。

      stringには、1段落のテキストを指定する必要があります。双方向アルゴリズムでは、段落全体が要求されるからです。

      パラメータ:
      string - 表示するテキスト
      attributes - テキストの書式を設定するために使用される属性
      frc - テキストを正確に測定するために必要なグラフィックス・デバイスに関する情報を格納する。 テキスト測定は、デバイスの解像度によりわずかに異なることがあり、アンチエイリアスなどの属性によっても異なることがある。 このパラメータは、TextLayoutとユーザー空間の間の変換は指定しない。
    • TextLayout

      public TextLayout​(AttributedCharacterIterator text, FontRenderContext frc)
      書式付きテキストのイテレータからTextLayoutを構築します。

      イテレータは、1段落のテキストを指定する必要があります。双方向アルゴリズムでは、段落全体が要求されるからです。

      パラメータ:
      text - 表示する書式付きテキスト
      frc - テキストを正確に測定するために必要なグラフィックス・デバイスに関する情報を格納する。 テキスト測定は、デバイスの解像度によりわずかに異なることがあり、アンチエイリアスなどの属性によっても異なることがある。 このパラメータは、TextLayoutとユーザー空間の間の変換は指定しない。
  • メソッドの詳細

    • clone

      protected Object clone()
      このTextLayoutのコピーを作成します。
      オーバーライド:
      clone、クラス: Object
      戻り値:
      このインスタンスの複製。
      関連項目:
      Cloneable
    • getJustifiedLayout

      public TextLayout getJustifiedLayout​(float justificationWidth)
      指定された幅に行揃えされた、このTextLayoutのコピーを作成します。

      このTextLayoutがすでに行揃えされている場合は例外がスローされます。 このTextLayoutオブジェクトの行揃え比率がゼロの場合、このTextLayoutと同一のTextLayoutが返されます。

      パラメータ:
      justificationWidth - 行揃えするために使用する幅。 最良の結果を得るためには、行の現在の有効幅との違いは小さい方がよい。
      戻り値:
      指定された幅に行揃えされたTextLayout
      例外:
      Error - このレイアウトがすでに行揃えされている場合、Errorがスローされる。
    • handleJustify

      protected void handleJustify​(float justificationWidth)
      このレイアウトを行揃えします。 行揃えを制御するためにサブクラサーによってオーバーライドされます(サブクラサーがある場合)。レイアウトは、段落の属性(ソース・テキストから派生。レイアウト属性によってデフォルトで設定される場合がある)がゼロ以外の行揃え比率を示す場合にだけ行揃えを行います。 テキストは、指定された幅に行揃えされます。 現在の実装は、行揃え幅を満たすためにハンギング・パンクチュエーションや末尾の空白も調整します。 レイアウトは、いったん行揃えされたあとは、行揃えし直すことができません。

      一部のコードはレイアウトの不変性に依存している場合があります。 サブクラスはこのメソッドを直接呼び出すのではなく、getJustifiedLayoutを呼び出した方がよいでしょう。getJustifiedLayoutは、このレイアウトの複製に対してこのメソッドを呼び出すので、元のレイアウトは保存されます。

      パラメータ:
      justificationWidth - 行揃えするために使用する幅。 最良の結果を得るためには、行の現在の有効幅との違いは小さい方がよい。
      関連項目:
      getJustifiedLayout(float)
    • getBaseline

      public byte getBaseline()
      このTextLayoutのベースラインを返します。 ベースラインは、Fontで定義される値(roman、centered、hanging)の1つです。 アセントおよびディセントは、このベースラインを基準にします。 baselineOffsetsもこのベースラインを基準にします。
      戻り値:
      このTextLayoutのベースライン。
      関連項目:
      getBaselineOffsets()Font
    • getBaselineOffsets

      public float[] getBaselineOffsets()
      このTextLayoutで使用されるベースラインのオフセット配列を返します。

      この配列は、Fontで定義される値(roman、centered、hanging)の1つでインデックス付けされます。 これらの値は、この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のディセント。
    • getLeading

      public float getLeading()
      TextLayoutのリーディングを返します。 リーディングは、このTextLayout用として推奨されている行間スペースです。 これはベースラインを基準にした座標で表されます。

      リーディングは、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
    • getPixelBounds

      public Rectangle getPixelBounds​(FontRenderContext frc, float x, float y)
      指定された位置にある指定されたFontRenderContextを使用してグラフィックス内にレンダリングされるときの、このTextLayoutのピクセル境界を返します。 グラフィックス描画コンテキストは、このTextLayoutの作成に使用されるFontRenderContextと同じである必要はなく、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を返し、右から左の場合にfalseを返します。 TextLayoutには、左から右(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に対応するキャレットについての情報を返します。 配列の最初の要素は、キャレットとベースラインの交点です。ベースラインに沿った距離で表されます。 配列の2番目の要素は、キャレットの逆傾き(ラン/ライズ)です。その点でのベースラインを基準にして測定されます。

      このメソッドは、情報のためだけに使用されます。 キャレットを表示するには、getCaretShapesを使用してください。

      パラメータ:
      hit - 次にある文字のヒット: TextLayout
      bounds - キャレット情報が構築される境界。 境界はベースラインを基準にした座標で表される。
      戻り値:
      キャレットの位置と傾きが格納されている2要素配列。 返されるキャレット情報は、ベースラインを基準にした座標で表される。
      関連項目:
      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を返します。 ヒットは、指定されたポリシーによる、指定されたオフセット位置の強いキャレットの右側にあります。 返されるヒットは、指定されたポリシーによる、2つのヒットの強い方です。
      パラメータ:
      offset - このTextLayoutの挿入オフセット。 0より小さい値やこのTextLayoutオブジェクトの文字カウントより大きな値は指定できない。
      policy - 強いキャレットを選択するために使用されるポリシー
      戻り値:
      指定されたヒットのキャレットに対して右(下)方向に位置する次のキャレットのヒット、またはnull
    • getNextRightHit

      public TextHitInfo getNextRightHit​(int offset)
      右(下)方向の次のキャレットのヒットを返します。この方向にヒットがない場合はnullを返します。 ヒットは、デフォルトのポリシーによる、指定されたオフセット位置の強いキャレットの右にあります。 返されるヒットは、デフォルトのポリシーによる、2つのヒットの強い方です。
      パラメータ:
      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を返します。 ヒットは、指定されたポリシーによる、指定されたオフセット位置の強いキャレットの左にあります。 返されるヒットは、指定されたポリシーによる、2つのヒットの強い方です。
      パラメータ:
      offset - このTextLayoutの挿入オフセット。 0より小さい値やこのTextLayoutオブジェクトの文字カウントより大きな値は指定できない。
      policy - 強いキャレットを選択するために使用されるポリシー
      戻り値:
      指定されたヒットのキャレットに対して右(下)方向に位置する次のキャレットのヒット、またはnull
    • getNextLeftHit

      public TextHitInfo getNextLeftHit​(int offset)
      左(上)方向の次のキャレットのヒットを返します。この方向にヒットがない場合はnullを返します。 ヒットは、デフォルトのポリシーによる、指定されたオフセット位置の強いキャレットの左です。 返されるヒットは、デフォルトのポリシーによる、2つのヒットの強い方です。
      パラメータ:
      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 - レベルを取得する文字のインデックス
      戻り値:
      指定されたインデックスにある文字のレベル。
    • getCaretShapes

      public Shape[] getCaretShapes​(int offset, Rectangle2D bounds, TextLayout.CaretPolicy policy)
      強いキャレットと弱いキャレットに対応する2つの輪郭線を返します。
      パラメータ:
      offset - 次の中にあるオフセット: TextLayout
      bounds - キャレットを拡張する境界。 境界はベースラインを基準にした座標で表される。
      policy - 指定されたCaretPolicy
      戻り値:
      2つのパスの配列。 要素0は強いキャレット。 2つのキャレットがある場合、要素1は弱いキャレット。そうでない場合、要素1はnull 返される形状は標準の座標で表される。
    • getCaretShapes

      public Shape[] getCaretShapes​(int offset, Rectangle2D bounds)
      強いキャレットと弱いキャレットに対応する2つの輪郭線を返します。 このメソッドは、getCaretShapesの簡易オーバーロードであり、デフォルトのキャレット・ポリシーを使用します。
      パラメータ:
      offset - 次の中にあるオフセット: TextLayout
      bounds - キャレットを拡張する境界。 これはベースラインを基準にした座標で表されます。
      戻り値:
      DEFAULT_CARET_POLICYでの定義による、強いキャレットと弱いキャレットに対応する2つのパス。 これらは標準の座標で表される。
    • getCaretShapes

      public Shape[] getCaretShapes​(int offset)
      強いキャレットと弱いキャレットに対応する2つの輪郭線を返します。 このメソッドは、getCaretShapesの簡易オーバーロードであり、デフォルトのキャレット・ポリシーおよびこのTextLayoutオブジェクトの自然境界を使用します。
      パラメータ:
      offset - 次の中にあるオフセット: TextLayout
      戻り値:
      DEFAULT_CARET_POLICYでの定義による、強いキャレットと弱いキャレットに対応する2つのパス。 これらは標準の座標で表される。
    • 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まで拡張して返します。

      選択範囲に最初の論理文字が含まれている場合、その選択範囲はこの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の境界。 これはベースラインを基準にした座標で表されます。
      戻り値:
      指定された点の下の文字およびエッジ(リーディング・エッジまたはトレーリング・エッジ)を記述するヒット。
    • hitTestChar

      public TextHitInfo hitTestChar​(float x, float y)
      指定された点に対応するTextHitInfoを返します。 このメソッドは、hitTestCharの簡易オーバーロードであり、このTextLayoutの自然境界を使用します。
      パラメータ:
      x - このTextLayoutの原点からのxオフセット。 これは標準の座標で表される。
      y - このTextLayoutの原点からのyオフセット。 これは標準の座標で表される。
      戻り値:
      指定された点の下の文字およびエッジ(リーディング・エッジまたはトレーリング・エッジ)を記述するヒット。
    • equals

      public boolean equals​(TextLayout rhs)
      2つのレイアウトが等しい場合にtrueを返します。 equals(Object)の一般的な契約をしています。
      パラメータ:
      rhs - このTextLayoutと比較するTextLayout
      戻り値:
      指定されたTextLayoutがこのTextLayoutと等しい場合はtrue
    • toString

      public String toString()
      このTextLayoutのデバッグ情報を返します。
      オーバーライド:
      toString 、クラス:  Object
      戻り値:
      このTextLayouttextLineを表す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)
      このTextLayoutの輪郭を表すShapeを返します。
      パラメータ:
      tx - このTextLayoutの輪郭に適用するオプションのAffineTransform
      戻り値:
      このTextLayoutの輪郭であるShape これは標準の座標で表される。
    • getLayoutPath

      public LayoutPath getLayoutPath()
      LayoutPathを返します。レイアウト・パスがデフォルトのパスである場合は(xが有効幅、yがオフセットにマップされます)、nullを返します。
      戻り値:
      レイアウト・パス
      導入されたバージョン:
      1.6
    • hitToPoint

      public void hitToPoint​(TextHitInfo hit, Point2D point)
      ヒットを標準座標のポイントに変換します。 このポイントは、文字のベースライン上にあり、場合に応じて文字のリーディング・エッジまたはトレーリング・エッジに当たります。 このヒットで表される文字の横でパスが分割されている場合、ポイントは文字に隣接します。
      パラメータ:
      hit - チェック対象のヒット。 これはTextLayout上の有効なヒットでなければならない。
      point - 返されるポイント。 ポイントは標準の座標で表される。
      例外:
      IllegalArgumentException - ヒットがTextLayoutに対して有効でない場合。
      NullPointerException - hitまたはpointがnullの場合。
      導入されたバージョン:
      1.6