JavaTM 2 Platform
Std. Ed. v1.3

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 の構築は、論理的には次の順序で行われます。

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, loc.getX(), 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.
 

関連項目:
LineBreakMeasurer, TextAttribute, TextHitInfo

内部クラスの概要
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 attributes, FontRenderContext frc)
          String および属性セットから TextLayout を構築します。
 
メソッドの概要
protected  Object clone()
          この TextLayout のコピーを作成します。
 void draw(Graphics2D g2, float x, float y)
          指定された Graphics2D コンテキストの指定された位置にこの TextLayout を描画します。
 boolean equals(Object obj)
          指定された ObjectTextLayout オブジェクトで、指定された Object がこの TextLayout と等しい場合に true を返します。
 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 のコピーを作成します。
 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)
          左 (上) 方向の次のキャレットのヒットを返します。
 TextHitInfo getNextLeftHit(int offset, TextLayout.CaretPolicy policy)
          左 (上) 方向の次のキャレットのヒットを返します。
 TextHitInfo getNextLeftHit(TextHitInfo hit)
          左 (上) 方向の次のキャレットのヒットを返します。
 TextHitInfo getNextRightHit(int offset)
          右 (下) 方向の次のキャレットのヒットを返します。
 TextHitInfo getNextRightHit(int offset, TextLayout.CaretPolicy policy)
          右 (下) 方向の次のキャレットのヒットを返します。
 TextHitInfo getNextRightHit(TextHitInfo hit)
          右 (下) 方向の次のキャレットのヒットを返します。
 Shape getOutline(AffineTransform tx)
          この TextLayout の輪郭を表す Shape を返します。
 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)
          このレイアウトを行揃えします。
 int hashCode()
          この TextLayout のハッシュコードを返します。
 TextHitInfo hitTestChar(float x, float y)
          指定された点に対応する TextHitInfo を返します。
 TextHitInfo hitTestChar(float x, float y, Rectangle2D bounds)
          指定された点に対応する TextHitInfo を返します。
 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)
String および Font から TextLayout を構築します。すべてのテキストは、指定された Font を使用して書式が設定されます。

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

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

TextLayout

public TextLayout(String string,
                  Map attributes,
                  FontRenderContext frc)
String および属性セットから TextLayout を構築します。

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

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

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

TextLayout

public TextLayout(AttributedCharacterIterator text,
                  FontRenderContext frc)
書式付きテキストの反復子から TextLayout を構築します。

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

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

clone

protected Object clone()
この TextLayout のコピーを作成します。
オーバーライド:
クラス Object 内の clone
クラス java.lang.Object からコピーされたタグ:
戻り値:
このインスタンスの複製
例外:
CloneNotSupportedException - オブジェクトのクラスが Cloneable インタフェースをサポートしていない場合。clone メソッドをオーバーライドしたサブクラスも、インスタンスを複製できないことを示すためにこの例外をスローすることがある
OutOfMemoryError - 十分なメモリがない場合
関連項目:
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 のアセント

getDescent

public float getDescent()
この 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

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 のオフセット
bounds - キャレットを拡張する境界
戻り値:
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 より小さくても可
戻り値:
ブラックボックス境界を囲むパス

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 オフセット
戻り値:
指定された点より下の文字およびエッジ (先頭または末尾) を記述するヒット

hashCode

public int hashCode()
この TextLayout のハッシュコードを返します。
オーバーライド:
クラス Object 内の hashCode
戻り値:
この TextLayout のハッシュコード

equals

public boolean equals(Object obj)
指定された ObjectTextLayout オブジェクトで、指定された Object がこの TextLayout と等しい場合に true を返します。
オーバーライド:
クラス Object 内の equals
パラメータ:
obj - 等しいかどうかが判定される Object
戻り値:
指定された Object がこの TextLayout と等しい場合は true、そうでない場合は false

equals

public boolean equals(TextLayout rhs)
2 つのレイアウトが等しい場合に true を返します。2 つのレイアウトは、それらが同じ順序で同じグリフベクトルを格納している場合に等しくなります。
パラメータ:
rhs - この TextLayout と比較する TextLayout
戻り値:
指定された TextLayout がこの TextLayout と等しい場合は true

toString

public String toString()
この TextLayout のデバッグ情報を返します。
オーバーライド:
クラス Object 内の toString
戻り値:
この TextLayouttextLine を表す String

draw

public void draw(Graphics2D g2,
                 float x,
                 float y)
指定された Graphics2D コンテキストの指定された位置にこの TextLayout を描画します。レイアウトの原点は x, y です。描画は、この位置の getBounds() 内の任意の点に接します。g2 は変更されません。
パラメータ:
g2 - レイアウトの描画先の Graphics2D コンテキスト
x, y - この TextLayout の原点の座標
関連項目:
getBounds()

getOutline

public Shape getOutline(AffineTransform tx)
この TextLayout の輪郭を表す Shape を返します。
パラメータ:
tx - この TextLayout の輪郭に適用する任意指定の AffineTransform
戻り値:
この TextLayout の輪郭である Shape

JavaTM 2 Platform
Std. Ed. v1.3

バグや機能要求の報告
さらに詳しい API リファレンスおよび開発者ドキュメントについては、 Java 2 SDK SE Developer Documentation を参照してください。このドキュメントには、概念、用語の定義、回避策、 実用的なコード例など、開発者を対象にした詳細な解説が掲載されています。

Java、Java 2D、JDBC は、米国およびその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2000 Sun Microsystems, Inc. 901 San Antonio Road,
Palo Alto, California, 94303, U.S.A. All Rights Reserved.