JavaTM 2 Platform
Standard Ed. 6

java.awt.font
類別 TextLayout

java.lang.Object
  繼承者 java.awt.font.TextLayout
所有已實作的介面:
Cloneable

public final class TextLayout
extends Object
implements Cloneable

TextLayout 是樣式字元資料的不可變圖形表示形式。

它提供以下功能:

TextLayout 物件可以使用其 draw 方法呈現。

可以直接或通過使用 LineBreakMeasurer 建構 TextLayout。直接建構時,源文本表示一個段落。LineBreakMeasurer 允許帶樣式的文本斷行,以適應特定的寬度。有關更多資訊,請參閱 LineBreakMeasurer 文檔。

TextLayout 的邏輯建構過程如下:

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 tranlated to origin of layout
   g.setColor(selectionColor);
   g.fill(selection);
 

繪製一個視覺上連續的選擇範圍。選擇範圍可能對應源文本中的多個子字元串。通過 getLogicalRangesForVisualSelection() 可以獲得相應源文本的子字元串範圍:

   TextHitInfo selStart = ..., selLimit = ...;
   Shape selection = layout.getVisualHighlightShape(selStart, selLimit);
   g.setColor(selectionColor);
   g.fill(selection);
   int[] ranges = getLogicalRangesForVisualSelection(selStart, selLimit);
   // ranges[0], ranges[1] is the first selection range,
   // ranges[2], ranges[3] is the second selection range, etc.
 

註:字體旋轉可能導致文本基線旋轉,多次進行不同的旋轉可能夠導致基線彎曲或出現 Z 形轉角。為了處理好這種(少有的)可能性,需要指定一些 API 返回規格,並採用「相對於基線的坐標中」的參數(比如 ascent 和 advance),以及其他一些「標準坐標中」的規格和參數(比如 getBounds)。相對於基線的坐標中的值將 'x' 坐標映射到沿基線的某段距離處(正 x 表示沿基線的正方向),將 'y' 坐標映射到 'x' 坐標處基線垂直方向的某段距離處(正 y 表示從基線向量順時針旋轉 90 度)。標準坐標中的值是沿 x 軸和 y 軸進行測量的,0,0 是 TextLayout 的原點。用於每個相關 API 的文檔都將指示哪些值位於坐標系中。通常,與測量有關的 API 位於與相對於基線的坐標中,而與顯示有關的 API 則位於標準坐標中。

另請參見:
LineBreakMeasurer, TextAttribute, TextHitInfo, LayoutPath

巢狀類別摘要
static class TextLayout.CaretPolicy
          定義確定強插入符位置的策略。
 
欄位摘要
static TextLayout.CaretPolicy DEFAULT_CARET_POLICY
          客戶端未指定策略時使用此 CaretPolicy
 
建構子摘要
TextLayout(AttributedCharacterIterator text, FontRenderContext frc)
          根據樣式文本上的迭代器建構一個 TextLayout
TextLayout(String string, Font font, FontRenderContext frc)
          根據 StringFont 建構一個 TextLayout
TextLayout(String string, Map<? extends AttributedCharacterIterator.Attribute,?> attributes, FontRenderContext frc)
          根據 String 和屬性集建構一個 TextLayout
 
方法摘要
protected  Object clone()
          創建此 TextLayout 的副本。
 void draw(Graphics2D g2, float x, float y)
          在指定的 Graphics2D 上下文中的指定位置上呈現此 TextLayout
 boolean equals(Object obj)
          如果指定 Object 是一個 TextLayout 物件,且指定的 Object 等於此 TextLayout,則返回 true
 boolean equals(TextLayout rhs)
          如果兩個佈局相等,則返回 true
 float getAdvance()
          返回此 TextLayout 的 advance。
 float getAscent()
          返回此 TextLayout 的 ascent。
 byte getBaseline()
          返回此 TextLayout 的基線。
 float[] getBaselineOffsets()
          返回用於此 TextLayout 的基線偏移量陣列。
 Shape getBlackBoxBounds(int firstEndpoint, int secondEndpoint)
          返回指定範圍中字元的黑框邊界。
 Rectangle2D getBounds()
          返回此 TextLayout 的邊界。
 float[] getCaretInfo(TextHitInfo hit)
          返回與對應於 hit 的插入符有關的資訊。
 float[] getCaretInfo(TextHitInfo hit, Rectangle2D bounds)
          返回與對應於 hit 的插入符有關的資訊。
 Shape getCaretShape(TextHitInfo hit)
          返回表示此 TextLayout 的自然邊界中指定目標字元處插入符的 Shape
 Shape getCaretShape(TextHitInfo hit, Rectangle2D bounds)
          返回表示指定邊界內指定目標字元處插入符的 Shape
 Shape[] getCaretShapes(int offset)
          返回對應於強插入符和弱插入符的兩條路徑。
 Shape[] getCaretShapes(int offset, Rectangle2D bounds)
          返回對應於強插入符和弱插入符的兩條路徑。
 Shape[] getCaretShapes(int offset, Rectangle2D bounds, TextLayout.CaretPolicy policy)
          返回對應於強插入符和弱插入符的兩條路徑。
 int getCharacterCount()
          返回由此 TextLayout 表示的字元數。
 byte getCharacterLevel(int index)
          返回 index 處字元的級別。
 float getDescent()
          返回此 TextLayout 的 descent。
 TextLayout getJustifiedLayout(float justificationWidth)
          創建調整到指定寬度的此 TextLayout 的一個副本。
 LayoutPath getLayoutPath()
          返回 LayoutPath,如果佈局路徑是預設路徑(x 映射到 advance,y 映射到 offset),則返回 null。
 float getLeading()
          返回 TextLayout 的行距。
 Shape getLogicalHighlightShape(int firstEndpoint, int secondEndpoint)
          返回封裝指定範圍中邏輯選擇範圍的 Shape,它擴展到此 TextLayout 的自然邊界。
 Shape getLogicalHighlightShape(int firstEndpoint, int secondEndpoint, Rectangle2D bounds)
          返回封閉指定範圍中擴展到指定 bounds 的邏輯選擇範圍的 Shape
 int[] getLogicalRangesForVisualSelection(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint)
          返回對應於可視選擇範圍的邏輯文本範圍。
 TextHitInfo getNextLeftHit(int offset)
          返回下一個插入符左側(頂部)的目標字元;如果沒有這樣的字元,則返回 null
 TextHitInfo getNextLeftHit(int offset, TextLayout.CaretPolicy policy)
          返回下一個插入符左側(頂部)的目標字元;如果沒有這樣的字元,則返回 null
 TextHitInfo getNextLeftHit(TextHitInfo hit)
          返回下一個插入符左側(頂部)的目標字元;如果沒有這樣的字元,則返回 null
 TextHitInfo getNextRightHit(int offset)
          返回下一個插入符右側(底部)的目標字元;如果沒有這樣的字元,則返回 null
 TextHitInfo getNextRightHit(int offset, TextLayout.CaretPolicy policy)
          返回下一個插入符右側(底部)的目標字元;如果沒有這樣的字元,則返回 null
 TextHitInfo getNextRightHit(TextHitInfo hit)
          返回下一個插入符右側(底部)的目標字元;如果沒有這樣的字元,則返回 null
 Shape getOutline(AffineTransform tx)
          返回表示此 TextLayout 的輪廓的 Shape
 Rectangle getPixelBounds(FontRenderContext frc, float x, float y)
          返回在圖形中使用給定 FontRenderContext 在給定位置處呈現 TextLayout 時的像素邊界。
 float getVisibleAdvance()
          返回此 TextLayout 的 advance,減去結尾空格。
 Shape getVisualHighlightShape(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint)
          返回封閉指定範圍中擴展到指定邊界的可視選擇範圍的 Shape
 Shape getVisualHighlightShape(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint, Rectangle2D bounds)
          返回封閉指定範圍中擴展到 bounds 的可視選擇範圍的路徑。
 TextHitInfo getVisualOtherHit(TextHitInfo hit)
          返回位於指定目標字元插入符另一側的目標字元。
protected  void handleJustify(float justificationWidth)
          調整此佈局。
 int hashCode()
          返回此 TextLayout 的雜湊碼。
 TextHitInfo hitTestChar(float x, float y)
          返回對應於指定點的 TextHitInfo
 TextHitInfo hitTestChar(float x, float y, Rectangle2D bounds)
          返回對應於指定點的 TextHitInfo
 void hitToPoint(TextHitInfo hit, Point2D point)
          將一個命中點轉換為標準坐標中的一個點。
 boolean isLeftToRight()
          如果此 TextLayout 的基本方向是從左到右,則返回 true;如果基本方向是從右到左,則返回 false
 boolean isVertical()
          如果此 TextLayout 是垂直的,則返回 true
 String toString()
          返回此 TextLayout 的除錯資訊。
 
從類別 java.lang.Object 繼承的方法
finalize, getClass, notify, notifyAll, wait, wait, wait
 

欄位詳細資訊

DEFAULT_CARET_POLICY

public static final TextLayout.CaretPolicy DEFAULT_CARET_POLICY
客戶端未指定策略時使用此 CaretPolicy。使用此策略,方向與行方向相同的字元的命中要強於對反方向字元的命中。如果字元的方向相同,則對字元開始邊的命中要強於對字元結尾邊的命中。

建構子詳細資訊

TextLayout

public TextLayout(String string,
                  Font font,
                  FontRenderContext frc)
根據 StringFont 建構一個 TextLayout。使用指定的 Font 樣式化所有文本。

String 必須指定單個文本段,因為雙向演算法需要整個段落。

參數:
string - 要顯示的文本
font - 用於樣式化文本的 Font
frc - 套件含關於正確測量文本所需圖形設備的資訊。根據設備分辨率和屬性(如抗鋸齒)的不同,文本測量可能稍有變化。此參數未指定 TextLayout 和使用者空間之間的轉換。

TextLayout

public TextLayout(String string,
                  Map<? extends AttributedCharacterIterator.Attribute,?> attributes,
                  FontRenderContext frc)
根據 String 和屬性集建構一個 TextLayout

使用提供的屬性樣式化所有文本。

String 必須指定單個文本段,因為雙向演算法需要整個段落。

參數:
string - 要顯示的文本
attributes - 用於樣式化文本的屬性
frc - 套件含關於正確測量文本所需圖形設備的資訊。根據設備分辨率和屬性(如抗鋸齒)的不同,文本測量可能稍有變化。此參數未指定 TextLayout 和使用者空間之間的轉換。

TextLayout

public TextLayout(AttributedCharacterIterator text,
                  FontRenderContext frc)
根據樣式文本上的迭代器建構一個 TextLayout

該迭代器必須指定單個文本段,因為雙向演算法需要整個段落。

參數:
text - 要顯示的樣式文本
frc - 套件含關於正確測量文本所需圖形設備的資訊。根據設備分辨率和屬性(如抗鋸齒)的不同,文本測量可能稍有變化。此參數未指定 TextLayout 和使用者空間之間的轉換。
方法詳細資訊

clone

protected Object clone()
創建此 TextLayout 的副本。

覆寫:
類別 Object 中的 clone
返回:
此實例的一個副本。
另請參見:
Cloneable

getJustifiedLayout

public TextLayout getJustifiedLayout(float justificationWidth)
創建調整到指定寬度的此 TextLayout 的一個副本。

如果已調整了此 TextLayout,則拋出異常。如果此 TextLayout 物件的調整率為零,將返回與此 TextLayout 相同的 TextLayout

參數:
justificationWidth - 調整行時使用的寬度。要獲得最佳結果,該寬度與行的當前 advance 不應有太大差別。
返回:
調整到指定寬度的 TextLayout
拋出:
Error - 如果已調整了此佈局,則拋出 Error。

handleJustify

protected void handleJustify(float justificationWidth)
調整此佈局。子類別覆寫該方法來控制調整(如果存在子類別,即……)。 只在段落屬性(來自源文本,可以是佈局屬性的預設值)指示一個非零調整率時才調整佈局。將文本調整到指示的寬度。當前實作還調整標點和尾部空白,使其接近於調整寬度。調整佈局之後將不會對其進行再調整。

某些程式碼依賴於佈局的不可變性。因此子類別不應直接調用該方法,而應調用 getJustifiedLayout,getJustifiedLayout 將在此佈局的副本上調用此方法,並保留原始佈局。

參數:
justificationWidth - 調整行時使用的寬度。要獲得最佳結果,該寬度與行的當前 advance 不應有太大差別。
另請參見:
getJustifiedLayout(float)

getBaseline

public byte getBaseline()
返回此 TextLayout 的基線。基線是 Font 中定義的一個值,它可以是 roman、centered 或 hanging。Ascent 和 descent 相對於此基線。baselineOffsets 也相對於此基線。

返回:
TextLayout 的基線。
另請參見:
getBaselineOffsets(), Font

getBaselineOffsets

public float[] getBaselineOffsets()
返回用於此 TextLayout 的基線偏移量陣列。

該陣列用 Font 中定義的 roman、centered 或 hanging 值之一進行索引。這些值相對於此 TextLayout 物件的基線,從而 getBaselineOffsets[getBaseline()] == 0。將偏移量添加到 TextLayout 物件基線所在的位置,以獲取新基線的位置。

返回:
包含用於此 TextLayout 基線的偏移量陣列。
另請參見:
getBaseline(), Font

getAdvance

public float getAdvance()
返回此 TextLayout 的 advance。該 advance 是從原點到最右邊(最底部)字元的 advance 的距離。返回值位於相對於基線的坐標中。

返回:
TextLayout 的 advance。

getVisibleAdvance

public float getVisibleAdvance()
返回此 TextLayout 的 advance,減去結尾空格。返回值位於相對於基線的坐標中。

返回:
TextLayout 的 advance,不包括結尾的空格。
另請參見:
getAdvance()

getAscent

public float getAscent()
返回此 TextLayout 的 ascent。ascent 是從 TextLayout 的頂端(右端)到基線的距離。它始終為正數或零。ascent 足以容納上標文本,它是每個字形的 ascent、偏移量和基線總和的最大值。該 ascent 是 TextLayout 中所有文本基線的最大 ascent。返回值位於相對於基線的坐標中。

返回:
TextLayout 的 ascent。

getDescent

public float getDescent()
返回此 TextLayout 的 descent。descent 是從基線到 TextLayout 底部(左端)的距離。它始終為正數或零。descent 足以容納下標文本,它是每個字形的 descent、偏移量和基線總和的最大值。該 ascent 是 TextLayout 中所有文本基線的最大 descent。返回值位於相對於基線的坐標中。

返回:
TextLayout 的 descent。

getLeading

public float getLeading()
返回 TextLayout 的行距。行距是此 TextLayout 的建議行間距。返回值位於相對於基線的坐標中。

行距通過 TextLayout 中所有字形向量的行距、descent 和基線計算。演算法大致如下:

 maxD = 0;
 maxDL = 0;
 for (GlyphVector g in all glyphvectors) {
    maxD = max(maxD, g.getDescent() + offsets[g.getBaseline()]);
    maxDL = max(maxDL, g.getDescent() + g.getLeading() +
                       offsets[g.getBaseline()]);
 }
 return maxDL - maxD;
 

返回:
TextLayout 的行距。

getBounds

public Rectangle2D getBounds()
返回此 TextLayout 的邊界。這些邊界位於標準坐標中。因為光柵化效果,這些邊界可能沒有封裝 TextLayout 呈現的所有像素。它可能與 TextLayout 的 ascent、descent、origin 或 advance 並不完全一致。

返回:
作為此 TextLayout 邊界的 Rectangle2D

getPixelBounds

public Rectangle getPixelBounds(FontRenderContext frc,
                                float x,
                                float y)
返回在圖形中使用給定 FontRenderContext 在給定位置處呈現 TextLayout 時的像素邊界。圖形呈現上下文不必與用來創建此 TextLayoutFontRenderContext 相同,並且可以為 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;如果基本方向是從右到左,則返回 falseTextLayout 的基本方向是從左到右 (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 的插入符有關的資訊。陣列的第一個元素是插入符與基線的交集,它是沿基線的一段距離。陣列的第二個元素是插入符的反斜面(排列/上升),它是根據位於該點的基線進行測量的。

此方法僅用於獲取資訊。要顯示插入符,最好使用 getCaretShapes

參數:
hit - 此 TextLayout 中的目標字元
bounds - 建構插入符位置的邊界。這些邊界位於相對於基線的坐標中。
返回:
包含插入符位置和斜面的兩元素陣列。返回的插入符資訊位於相對於基線的坐標中。
另請參見:
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。目標字元位於指定偏移量處根據指定策略確定的強插入符右側。返回的目標字元是根據指定策略確定的兩個可能目標字元中較強的一個。

參數:
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 中的目標字元。
返回:
插入符顯示在所提供目標字元的插入符左側(頂部)下一個位置的目標字元,或者返回 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)
返回表示此 TextLayout 的自然邊界中指定目標字元處插入符的 Shape

參數:
hit - 產生插入符處的目標字元
返回:
表示插入符的 Shape。返回的形狀位於標準坐標中。

getCharacterLevel

public byte getCharacterLevel(int index)
返回 index 處字元的級別。索引 -1 和 characterCount 被分派為此 TextLayout 的基本級別。

參數:
index - 可獲取級別的字元索引
返回:
指定 index 處字元的級別。

getCaretShapes

public Shape[] getCaretShapes(int offset,
                              Rectangle2D bounds,
                              TextLayout.CaretPolicy policy)
返回對應於強插入符和弱插入符的兩條路徑。

參數:
offset - 此 TextLayout 中的偏移量
bounds - 插入符擴展到的邊界。這些邊界位於相對於基線的坐標中。
policy - 指定的 CaretPolicy
返回:
包含兩條路徑的陣列。元素零是強插入符。如果有兩個插入符,則元素 1 為弱插入符,否則為 null。返回的形狀位於標準坐標中。

getCaretShapes

public Shape[] getCaretShapes(int offset,
                              Rectangle2D bounds)
返回對應於強插入符和弱插入符的兩條路徑。此方法是使用預設插入符策略的 getCaretShapes 的便捷用法。

參數:
offset - 此 TextLayout 中的偏移量
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)
返回封閉指定範圍中擴展到指定 bounds 的邏輯選擇範圍的 Shape

如果選擇範圍包括第一個邏輯字元,那麼它將擴展到此 TextLayout 的起點之前的 bounds 部分。如果該範圍包括最後的邏輯字元,那麼它將擴展到此 TextLayout 的結束點之後的 bounds 部分。選擇範圍的高度(垂直行上的寬度)始終擴展到 bounds

選擇範圍在混向文本的行上可能是不連續的。只有邏輯範圍中開始和限制之間的那些字元才顯示為被選中。例如,假定文本 "ABCdef" 的大寫字母表示在從右到左的行上呈現從右到左的文本,邏輯選擇範圍是從 0 到 4 ('ABCd')。文本顯示如下,粗體表示選擇範圍,下劃線表示擴展:

    defCBA  
 
因為選擇的字元在視覺上是不連續的,該選擇範圍是不連續的。還請注意的是,由於該範圍包括第一個邏輯字元 (A),所以該選擇範圍將擴展到佈局開始之前的 bounds 部分,在本例中(從右到左的行)是 bounds 的右半部。

參數:
firstEndpoint - 選擇的字元範圍的端點
secondEndpoint - 選擇的字元範圍的另一個端點。可以小於 firstEndpoint。此範圍包括 min(firstEndpoint, secondEndpoint) 處的字元,但不包括 max(firstEndpoint, secondEndpoint) 處的字元。
bounds - 選擇範圍擴展到的邊界矩形。此矩形位於相對於基線的坐標中。
返回:
封裝該選擇範圍的區域。此區域位於標準坐標中。
另請參見:
getVisualHighlightShape(TextHitInfo, TextHitInfo, Rectangle2D)

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 的邊界。此邊界位於相對於基線的坐標中。
返回:
描述指定點處字元和邊緣(開始邊或結尾邊)的 TextHitInfo。

hitTestChar

public TextHitInfo hitTestChar(float x,
                               float y)
返回對應於指定點的 TextHitInfo。此方法是 hitTestChar 的便捷用法,後者使用了此 TextLayout 的自然邊界。

參數:
x - 距離此 TextLayout 原點的 x 偏移量。此偏移量位於標準坐標中。
y - 距離此 TextLayout 原點的 y 偏移量。此偏移量位於標準坐標中。
返回:
描述指定點下字元和邊緣(開始邊或結尾邊)的 TextHitInfo。

hashCode

public int hashCode()
返回此 TextLayout 的雜湊碼。

覆寫:
類別 Object 中的 hashCode
返回:
TextLayout 的雜湊碼。
另請參見:
Object.equals(java.lang.Object), Hashtable

equals

public boolean equals(Object obj)
如果指定 Object 是一個 TextLayout 物件,且指定的 Object 等於此 TextLayout,則返回 true

覆寫:
類別 Object 中的 equals
參數:
obj - 用於測試相等性的 Object
返回:
如果指定的 Object 等於此 TextLayout,則返回 true;否則返回 false
另請參見:
Object.hashCode(), Hashtable

equals

public boolean equals(TextLayout rhs)
如果兩個佈局相等,則返回 true。如果兩個佈局包含具有相同順序的相等字形向量,則這兩個佈局相等。

參數:
rhs - 要與此 TextLayout 進行比較的 TextLayout
返回:
如果指定的 TextLayout 等於此 TextLayout,則返回 true

toString

public String toString()
返回此 TextLayout 的除錯資訊。

覆寫:
類別 Object 中的 toString
返回:
TextLayoutString 形式的 textLine

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 映射到 advance,y 映射到 offset),則返回 null。

返回:
佈局路徑
從以下版本開始:
1.6

hitToPoint

public void hitToPoint(TextHitInfo hit,
                       Point2D point)
將一個命中點轉換為標準坐標中的一個點。該點在字元的基線上,在適當的情況下,它可以位於字元的開始邊或結尾邊上。如果路徑在通過命中表示的字元邊上斷開,那麼該點將與此字元相鄰。

參數:
hit - 命中檢查。此參數必須是 TextLayout 上的一次有效命中。
point - 返回的點。此點位於標準坐標中。
拋出:
IllegalArgumentException - 如果 hit 對於 TextLayout 無效。
NullPointerException - 如果 hit 或 point 為 null。
從以下版本開始:
1.6

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only