|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.awt.font.TextLayout
public final class TextLayout
TextLayout
是樣式字元資料的不可變圖形表示形式。
它提供以下功能:
TextLayout
物件可以使用其 draw
方法呈現。
可以直接或通過使用 LineBreakMeasurer
建構 TextLayout
。直接建構時,源文本表示一個段落。LineBreakMeasurer
允許帶樣式的文本斷行,以適應特定的寬度。有關更多資訊,請參閱 LineBreakMeasurer
文檔。
TextLayout
的邏輯建構過程如下:
TextAttribute.FONT
屬性,則首先使用該字體,否則,通過使用已定義的屬性計算預設字體
從 TextLayout
物件的方法返回的所有圖形資訊都相對於 TextLayout
的原點,它是 TextLayout
物件的基線與其左邊緣的交叉點。同樣,假定傳遞到 TextLayout
物件方法的坐標也相對於 TextLayout
物件的原點。客戶端通常需要在 TextLayout
物件的坐標系和另一物件(如 Graphics
物件)中的坐標系之間進行轉換。
根據樣式文本創建 TextLayout
物件,但它們不保留對其源文本的參考。因此,對先前用來產生 TextLayout
文本的改動不會影響 TextLayout
。
TextLayout
物件的三個方法(getNextRightHit
、getNextLeftHit
和 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 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)
根據 String 和 Font 建構一個 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 |
欄位詳細資訊 |
---|
public static final TextLayout.CaretPolicy DEFAULT_CARET_POLICY
CaretPolicy
。使用此策略,方向與行方向相同的字元的命中要強於對反方向字元的命中。如果字元的方向相同,則對字元開始邊的命中要強於對字元結尾邊的命中。
建構子詳細資訊 |
---|
public TextLayout(String string, Font font, FontRenderContext frc)
String
和 Font
建構一個 TextLayout
。使用指定的 Font
樣式化所有文本。
String
必須指定單個文本段,因為雙向演算法需要整個段落。
string
- 要顯示的文本font
- 用於樣式化文本的 Font
frc
- 套件含關於正確測量文本所需圖形設備的資訊。根據設備分辨率和屬性(如抗鋸齒)的不同,文本測量可能稍有變化。此參數未指定 TextLayout
和使用者空間之間的轉換。public TextLayout(String string, Map<? extends AttributedCharacterIterator.Attribute,?> attributes, FontRenderContext frc)
String
和屬性集建構一個 TextLayout
。
使用提供的屬性樣式化所有文本。
String
必須指定單個文本段,因為雙向演算法需要整個段落。
string
- 要顯示的文本attributes
- 用於樣式化文本的屬性frc
- 套件含關於正確測量文本所需圖形設備的資訊。根據設備分辨率和屬性(如抗鋸齒)的不同,文本測量可能稍有變化。此參數未指定 TextLayout
和使用者空間之間的轉換。public TextLayout(AttributedCharacterIterator text, FontRenderContext frc)
TextLayout
。
該迭代器必須指定單個文本段,因為雙向演算法需要整個段落。
text
- 要顯示的樣式文本frc
- 套件含關於正確測量文本所需圖形設備的資訊。根據設備分辨率和屬性(如抗鋸齒)的不同,文本測量可能稍有變化。此參數未指定 TextLayout
和使用者空間之間的轉換。方法詳細資訊 |
---|
protected Object clone()
TextLayout
的副本。
Object
中的 clone
Cloneable
public TextLayout getJustifiedLayout(float justificationWidth)
TextLayout
的一個副本。
如果已調整了此 TextLayout
,則拋出異常。如果此 TextLayout
物件的調整率為零,將返回與此 TextLayout
相同的 TextLayout
。
justificationWidth
- 調整行時使用的寬度。要獲得最佳結果,該寬度與行的當前 advance 不應有太大差別。
TextLayout
。
Error
- 如果已調整了此佈局,則拋出 Error。protected void handleJustify(float justificationWidth)
某些程式碼依賴於佈局的不可變性。因此子類別不應直接調用該方法,而應調用 getJustifiedLayout,getJustifiedLayout 將在此佈局的副本上調用此方法,並保留原始佈局。
justificationWidth
- 調整行時使用的寬度。要獲得最佳結果,該寬度與行的當前 advance 不應有太大差別。getJustifiedLayout(float)
public byte getBaseline()
TextLayout
的基線。基線是 Font
中定義的一個值,它可以是 roman、centered 或 hanging。Ascent 和 descent 相對於此基線。baselineOffsets
也相對於此基線。
TextLayout
的基線。getBaselineOffsets()
,
Font
public float[] getBaselineOffsets()
TextLayout
的基線偏移量陣列。
該陣列用 Font
中定義的 roman、centered 或 hanging 值之一進行索引。這些值相對於此 TextLayout
物件的基線,從而 getBaselineOffsets[getBaseline()] == 0
。將偏移量添加到 TextLayout
物件基線所在的位置,以獲取新基線的位置。
TextLayout
基線的偏移量陣列。getBaseline()
,
Font
public float getAdvance()
TextLayout
的 advance。該 advance 是從原點到最右邊(最底部)字元的 advance 的距離。返回值位於相對於基線的坐標中。
TextLayout
的 advance。public float getVisibleAdvance()
TextLayout
的 advance,減去結尾空格。返回值位於相對於基線的坐標中。
TextLayout
的 advance,不包括結尾的空格。getAdvance()
public float getAscent()
TextLayout
的 ascent。ascent 是從 TextLayout
的頂端(右端)到基線的距離。它始終為正數或零。ascent 足以容納上標文本,它是每個字形的 ascent、偏移量和基線總和的最大值。該 ascent 是 TextLayout 中所有文本基線的最大 ascent。返回值位於相對於基線的坐標中。
TextLayout
的 ascent。public float getDescent()
TextLayout
的 descent。descent 是從基線到 TextLayout
底部(左端)的距離。它始終為正數或零。descent 足以容納下標文本,它是每個字形的 descent、偏移量和基線總和的最大值。該 ascent 是 TextLayout 中所有文本基線的最大 descent。返回值位於相對於基線的坐標中。
TextLayout
的 descent。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
的行距。public Rectangle2D getBounds()
TextLayout
的邊界。這些邊界位於標準坐標中。因為光柵化效果,這些邊界可能沒有封裝 TextLayout 呈現的所有像素。它可能與 TextLayout
的 ascent、descent、origin 或 advance 並不完全一致。
TextLayout
邊界的 Rectangle2D
。public Rectangle getPixelBounds(FontRenderContext frc, float x, float y)
FontRenderContext
在給定位置處呈現 TextLayout
時的像素邊界。圖形呈現上下文不必與用來創建此 TextLayout
的 FontRenderContext
相同,並且可以為 null。如果為 null,則使用此 TextLayout
的 FontRenderContext
。
frc
- Graphics
的 FontRenderContext
。x
- 呈現此 TextLayout
處的 x 坐標。y
- 呈現此 TextLayout
處的 y 坐標。
Rectangle
。GlyphVector.getPixelBounds(java.awt.font.FontRenderContext, float, float)
public boolean isLeftToRight()
TextLayout
的基本方向是從左到右,則返回 true
;如果基本方向是從右到左,則返回 false
。TextLayout
的基本方向是從左到右 (LTR) 或從右到左 (RTL)。基本方向與行中文本的實際方向無關,實際方向可以是 LTR、RTL 或混向。預設情況下,從左到右佈局按左對齊來定位。如果佈局在製表行上進行,那麼製表符將從左到右,從而邏輯連續佈局的定位將從左到右。對於 RTL 佈局則相反。預設情況下,它們是按左對齊來定位的,製表符將從右到左。
TextLayout
的基本方向是從左到右,則返回 true
;否則返回 false
。public boolean isVertical()
TextLayout
是垂直的,則返回 true
。
TextLayout
是垂直的,則返回 true
;否則返回 false
。public int getCharacterCount()
TextLayout
表示的字元數。
TextLayout
中的字元數。public float[] getCaretInfo(TextHitInfo hit, Rectangle2D bounds)
hit
的插入符有關的資訊。陣列的第一個元素是插入符與基線的交集,它是沿基線的一段距離。陣列的第二個元素是插入符的反斜面(排列/上升),它是根據位於該點的基線進行測量的。
此方法僅用於獲取資訊。要顯示插入符,最好使用 getCaretShapes
。
hit
- 此 TextLayout
中的目標字元bounds
- 建構插入符位置的邊界。這些邊界位於相對於基線的坐標中。
getCaretShapes(int, Rectangle2D, TextLayout.CaretPolicy)
,
Font.getItalicAngle()
public float[] getCaretInfo(TextHitInfo hit)
hit
的插入符有關的資訊。此方法是 getCaretInfo
的便捷用法,它使用了此 TextLayout
的自然邊界。
hit
- 此 TextLayout
中的目標字元
public TextHitInfo getNextRightHit(TextHitInfo hit)
null
。如果目標字元索引超出範圍,則拋出 IllegalArgumentException
。
hit
- 此佈局中的目標字元
null
。public TextHitInfo getNextRightHit(int offset, TextLayout.CaretPolicy policy)
null
。目標字元位於指定偏移量處根據指定策略確定的強插入符右側。返回的目標字元是根據指定策略確定的兩個可能目標字元中較強的一個。
offset
- 此 TextLayout
中的插入偏移量。不能小於 0 或大於此 TextLayout
物件的字元計數。policy
- 用來選擇強插入符的策略
null
。public TextHitInfo getNextRightHit(int offset)
null
。目標字元位於指定偏移量處根據預設策略確定的強插入符右側。返回的目標字元是根據預設策略確定的兩個可能目標字元中較強的一個。
offset
- 此 TextLayout
中的插入偏移量。不能小於 0 或大於該 TextLayout
物件的字元計數。
null
。public TextHitInfo getNextLeftHit(TextHitInfo hit)
null
。如果目標字元索引超出範圍,則拋出 IllegalArgumentException
。
hit
- 此 TextLayout
中的目標字元。
null
。public TextHitInfo getNextLeftHit(int offset, TextLayout.CaretPolicy policy)
null
。目標字元位於指定偏移量處根據指定策略確定的強插入符左側。返回的目標字元是根據指定策略確定的兩個可能目標字元中較強的一個。
offset
- 此 TextLayout
中的插入偏移量。不能小於 0 或大於此 TextLayout
物件的字元計數。policy
- 用來選擇強插入符的策略
null
。public TextHitInfo getNextLeftHit(int offset)
null
。目標字元位於指定偏移量處根據預設策略確定的強插入符左側。返回的目標字元是根據預設策略確定的兩個可能目標字元中較強的一個。
offset
- 此 TextLayout
中的插入偏移量。不能小於 0 或大於此 TextLayout
物件的字元計數。
null
。public TextHitInfo getVisualOtherHit(TextHitInfo hit)
hit
- 指定的目標字元
public Shape getCaretShape(TextHitInfo hit, Rectangle2D bounds)
Shape
。
hit
- 產生插入符處的目標字元bounds
- 用於產生插入符的 TextLayout
的邊界。這些邊界位於相對於基線的坐標中。
Shape
。返回的形狀位於標準坐標中。public Shape getCaretShape(TextHitInfo hit)
TextLayout
的自然邊界中指定目標字元處插入符的 Shape
。
hit
- 產生插入符處的目標字元
Shape
。返回的形狀位於標準坐標中。public byte getCharacterLevel(int index)
index
處字元的級別。索引 -1 和 characterCount
被分派為此 TextLayout
的基本級別。
index
- 可獲取級別的字元索引
public Shape[] getCaretShapes(int offset, Rectangle2D bounds, TextLayout.CaretPolicy policy)
offset
- 此 TextLayout
中的偏移量bounds
- 插入符擴展到的邊界。這些邊界位於相對於基線的坐標中。policy
- 指定的 CaretPolicy
null
。返回的形狀位於標準坐標中。public Shape[] getCaretShapes(int offset, Rectangle2D bounds)
getCaretShapes
的便捷用法。
offset
- 此 TextLayout
中的偏移量bounds
- 插入符擴展到的邊界。此邊界位於相對於基線的坐標中。
DEFAULT_CARET_POLICY
定義的強插入符和弱插入符的兩條路徑。這些路徑位於標準坐標中。public Shape[] getCaretShapes(int offset)
getCaretShapes
的便捷用法,後者使用預設插入符策略和此 TextLayout
物件的自然邊界。
offset
- 此 TextLayout
中的偏移量
DEFAULT_CARET_POLICY
定義的強插入符和弱插入符的兩條路徑。這兩條路徑位於標準坐標中。public int[] getLogicalRangesForVisualSelection(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint)
firstEndpoint
- 可視範圍的端點secondEndpoint
- 可視範圍的另一個端點。此端點可以小於 firstEndpoint
。
getVisualHighlightShape(TextHitInfo, TextHitInfo, Rectangle2D)
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)
public Shape getVisualHighlightShape(TextHitInfo firstEndpoint, TextHitInfo secondEndpoint)
Shape
。此方法是 getVisualHighlightShape
的便捷用法,後者使用了此 TextLayout
的自然邊界。
firstEndpoint
- 可視選擇範圍的端點secondEndpoint
- 可視選擇範圍的另一個端點
Shape
。此形狀位於標準坐標中。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)
public Shape getLogicalHighlightShape(int firstEndpoint, int secondEndpoint)
Shape
,它擴展到此 TextLayout
的自然邊界。此方法是 getLogicalHighlightShape
的便捷用法,後者使用了此 TextLayout
的自然邊界。
firstEndpoint
- 選擇的字元範圍的端點secondEndpoint
- 選擇的字元範圍的另一個端點。可以小於 firstEndpoint
。此範圍包括 min(firstEndpoint, secondEndpoint) 處的字元,但不包括 max(firstEndpoint, secondEndpoint) 處的字元。
Shape
。 此形狀位於標準坐標中。public Shape getBlackBoxBounds(int firstEndpoint, int secondEndpoint)
firstEndpoint
- 字元範圍的端點secondEndpoint
- 字元範圍的另一個端點。可以小於 firstEndpoint
。
Shape
。此形狀位於標準坐標中。public TextHitInfo hitTestChar(float x, float y, Rectangle2D bounds)
TextHitInfo
。將 TextLayout
邊界之外的坐標映射到第一個邏輯字元開始邊上的點,或映射到最後一個邏輯字元結束邊上的點(如果合適),而不考慮該字元在行中的位置。該方法只使用基線方向。
x
- 距離此 TextLayout
原點的 x 偏移量。此偏移量位於標準坐標中。y
- 距離此 TextLayout
原點的 y 偏移量。此偏移量位於標準坐標中。bounds
- TextLayout
的邊界。此邊界位於相對於基線的坐標中。
public TextHitInfo hitTestChar(float x, float y)
TextHitInfo
。此方法是 hitTestChar
的便捷用法,後者使用了此 TextLayout
的自然邊界。
x
- 距離此 TextLayout
原點的 x 偏移量。此偏移量位於標準坐標中。y
- 距離此 TextLayout
原點的 y 偏移量。此偏移量位於標準坐標中。
public int hashCode()
TextLayout
的雜湊碼。
Object
中的 hashCode
TextLayout
的雜湊碼。Object.equals(java.lang.Object)
,
Hashtable
public boolean equals(Object obj)
Object
是一個 TextLayout
物件,且指定的 Object
等於此 TextLayout
,則返回 true
。
Object
中的 equals
obj
- 用於測試相等性的 Object
Object
等於此 TextLayout
,則返回 true
;否則返回 false
。Object.hashCode()
,
Hashtable
public boolean equals(TextLayout rhs)
true
。如果兩個佈局包含具有相同順序的相等字形向量,則這兩個佈局相等。
rhs
- 要與此 TextLayout
進行比較的 TextLayout
TextLayout
等於此 TextLayout
,則返回 true
。public String toString()
TextLayout
的除錯資訊。
Object
中的 toString
TextLayout
的 String
形式的 textLine
public void draw(Graphics2D g2, float x, float y)
Graphics2D
上下文中的指定位置上呈現此 TextLayout
。佈局的原點置於 x, y。呈現可能涉及此位置的 getBounds()
中的任何點。此方法不改變 g2
。文本是沿著基線路徑呈現的。
g2
- 呈現佈局的 Graphics2D
上下文x
- 此 TextLayout
的 X 坐標y
- 此 TextLayout
的 Y 坐標getBounds()
public Shape getOutline(AffineTransform tx)
TextLayout
的輪廓的 Shape
。
tx
- 應用於此 TextLayout
輪廓的可選 AffineTransform
。
TextLayout
的輪廓的 Shape
。此形狀位於標準坐標中。public LayoutPath getLayoutPath()
public void hitToPoint(TextHitInfo hit, Point2D point)
hit
- 命中檢查。此參數必須是 TextLayout 上的一次有效命中。point
- 返回的點。此點位於標準坐標中。
IllegalArgumentException
- 如果 hit 對於 TextLayout 無效。
NullPointerException
- 如果 hit 或 point 為 null。
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。