|
JavaTM Platform Standard Ed. 6 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.lang.Object java.awt.font.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 则位于标准坐标中。
嵌套类摘要 | |
---|---|
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()
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
的哈希码。
TextLayout
的哈希码。Object.equals(java.lang.Object)
,
Hashtable
public boolean equals(Object obj)
Object
是一个 TextLayout
对象,且指定的 Object
等于此 TextLayout
,则返回 true
。
obj
- 用于测试相等性的 Object
Object
等于此 TextLayout
,则返回 true
;否则返回 false
。Object.hashCode()
,
Hashtable
public boolean equals(TextLayout rhs)
true
。如果两个布局包含具有相同顺序的相等字形向量,则这两个布局相等。
rhs
- 要与此 TextLayout
进行比较的 TextLayout
TextLayout
等于此 TextLayout
,则返回 true
。public String toString()
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 Platform Standard Ed. 6 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。