public final class TextMeasurer extends Object implements Cloneable
TextMeasurer
类提供换行所需的基本操作:测量到给定的预先确定范围内的字符的前进,并产生TextLayout
用于一定范围的字符。
它还提供了段落增量编辑的方法。
TextMeasurer
对象被构造成表示文本的单个段落的AttributedCharacterIterator
。 getBeginIndex
方法返回的值为AttributedCharacterIterator
定义了第一个字符的绝对索引。 在返回的值getEndIndex
的方法AttributedCharacterIterator
定义过去的最后一个字符的索引。 这些值定义了在调用TextMeasurer
时使用的索引的范围。 例如,要获取一定范围的文本或文本范围的换行符的调用必须使用起始和结束索引值之间的索引。 调用insertChar
和deleteChar
重新设置TextMeasurer
使用这些调用中的AttributedCharacterIterator
的开始索引和结束索引。
大多数客户将使用更方便的LineBreakMeasurer
,它实现标准换行政策(放置尽可能多的单词适合每一行)。
LineBreakMeasurer
Constructor and Description |
---|
TextMeasurer(AttributedCharacterIterator text, FontRenderContext frc)
从源文本构造一个
TextMeasurer 。
|
Modifier and Type | Method and Description |
---|---|
protected Object |
clone()
创建并返回此对象的副本。
|
void |
deleteChar(AttributedCharacterIterator newParagraph, int deletePos)
从此TextMeasurer目前代表的段落中删除单个
TextMeasurer 后,更新
TextMeasurer 。
|
float |
getAdvanceBetween(int start, int limit)
返回线的开始在图形宽度
start 和包括字符,直到达到
limit 。
|
TextLayout |
getLayout(int start, int limit)
返回
TextLayout 给定的字符范围。
|
int |
getLineBreakIndex(int start, float maxAdvance)
返回其将不适合于在上开头的行中第一个字符的索引
start 和可能的测量高达
maxAdvance 在图形宽度。
|
void |
insertChar(AttributedCharacterIterator newParagraph, int insertPos)
将单个字符插入到此TextMeasurer当前
TextMeasurer 的
TextMeasurer 后,更新
TextMeasurer 。
|
public TextMeasurer(AttributedCharacterIterator text, FontRenderContext frc)
TextMeasurer
。
源文本应该是一个整个段落。
text
- 来源段落。
不能为空。
frc
- 有关正确测量文本所需的图形设备信息。
不能为空。
protected Object clone()
Object
x
,表达式:
将是真实的,而且表达:x.clone() != x
将会是x.clone().getClass() == x.getClass()
true
,但这些都不是绝对的要求。
通常情况是:
将是x.clone().equals(x)
true
,这不是一个绝对的要求。
按照惯例,返回的对象应该通过调用super.clone
获得。 如果一个类及其所有的超类(除Object
)遵守这个约定,它会出现的情况是x.clone().getClass() == x.getClass()
。
按照惯例,此方法返回的对象应该与此对象(正被克隆)无关。 为了实现这种独立性,可能需要修改super.clone
返回的对象的一个或多个字段。 通常,这意味着复制构成被克隆的对象的内部“深层结构”的任何可变对象,并通过引用该副本替换对这些对象的引用。 如果一个类仅包含原始字段或对不可变对象的引用,那么通常情况下不需要修改super.clone
返回的对象中的字段。
类别Object
的方法clone
执行特定的克隆操作。 首先,如果该对象的类不实现接口Cloneable
,那么会抛出一个CloneNotSupportedException
。 请注意,所有阵列都被认为是实现接口Cloneable
,并且数组类型T[]
的clone
方法的返回类型是T[]
,其中T是任何引用或原始类型。 否则,该方法将创建该对象的类的新实例,并将其所有字段初始化为完全符合该对象的相应字段的内容,就像通过赋值一样。 这些字段的内容本身不被克隆。 因此,该方法执行该对象的“浅拷贝”,而不是“深度拷贝”操作。
Object
类本身并不实现接口Cloneable
,因此在类别为Object
的对象上调用clone
方法将导致运行时抛出异常。
public int getLineBreakIndex(int start, float maxAdvance)
start
和可能的测量高达
maxAdvance
在图形宽度。
start
- 开始测量的字符索引。
start
是一个绝对的索引,不是相对于段落的开头
maxAdvance
- 线必须适合的图形宽度
start
,图形宽度不超过
maxAdvance
IllegalArgumentException
- 如果
start
小于段落的开头。
public float getAdvanceBetween(int start, int limit)
start
和包括字符,直到达到limit
。
start
和limit
是绝对指数,不是相对于段落的开头。
start
- 开始测量的字符索引
limit
- 停止测量的字符索引
start
和包括字符,直到达到
limit
IndexOutOfBoundsException
- 如果
limit
小于
start
IllegalArgumentException
- 如果
start
或
limit
不在段落开头和段落结尾之间。
public TextLayout getLayout(int start, int limit)
TextLayout
给定的字符范围。
start
- 第一个字符的索引
limit
- 最后一个字符后的索引。
必须大于start
TextLayout
的字符从
start
开始,直到(但不包括)
limit
IndexOutOfBoundsException
- 如果
limit
小于
start
IllegalArgumentException
- 如果
start
或
limit
不在段落开头和段落结尾之间。
public void insertChar(AttributedCharacterIterator newParagraph, int insertPos)
TextMeasurer
的TextMeasurer
后,更新TextMeasurer
。
此电话后,此TextMeasurer
TextMeasurer
从文本创建的新的TextMeasurer
;
然而,更新现有的TextMeasurer
比从头开始创建一个新的更有效。
newParagraph
- 执行插入后段落的文本。
不能为空。
insertPos
- 插入字符的文本中的位置。
不得少于newParagraph
的开始,必须小于newParagraph
的结束。
IndexOutOfBoundsException
-如果
insertPos
小于开始
newParagraph
,或者大于或等于的端
newParagraph
NullPointerException
- 如果
newParagraph
是
null
public void deleteChar(AttributedCharacterIterator newParagraph, int deletePos)
TextMeasurer
后,更新TextMeasurer
。
此电话后,此TextMeasurer
TextMeasurer
从文本创建的新的TextMeasurer
;
然而,更新现有的TextMeasurer
比从头开始创建一个新的更有效。
newParagraph
- 执行删除后段落的文本。
不能为空。
deletePos
- 字符被删除的文本中的位置。
不得少于newParagraph
的开始,不能大于newParagraph
。
IndexOutOfBoundsException
-如果
deletePos
小于开始
newParagraph
或大于的端
newParagraph
NullPointerException
- 如果
newParagraph
是
null