- java.lang.Object
-
- javafx.scene.control.TextFormatter.Change
-
- All Implemented Interfaces:
-
Cloneable
- Enclosing class:
- TextFormatter < V >
public static final class TextFormatter.Change extends Object implements Cloneable
包含表示TextInputControl的内容或选择更改的状态。 每当TextInputControl的文本被修改时,该对象将传递给TextInputControl上的任何注册的formatter。该类包含用于确定控件上发生什么变化的状态和方便方法。 它还引用了TextInputControl本身,以便开发人员可以查询控件上的任何其他状态。 请注意,您不应该直接从格式化程序处理程序中修改控件的状态。
文本的变化是由范围 (描述
getRangeStart(),getRangeEnd())和文本(getText()。有3箱子可能发生:- 一些文字被删除:在这种情况下,
text是空的,range表示删除的文本的range。 例如,在文本“Lorem ipsum dolor sit amet”中,删除第二个字将导致range(6,11)和一个空的text。 同样,如果要删除一些不同的或者附加的文字,只要设置range。 如果要删除第一个字而不是第二个字,请拨打setRange(0,5) - 添加了一些文本:现在
range是空的(意味着没有删除),但它的价值还是很重要的。range的开始和结束点指向添加新文本的索引。 例如加入“ipsum的”到“的Lorem悲坐阿梅特”将导致具有变化range的(6,6)和text包含字符串“文字”。 - 一些文字被替换: 2个以上的组合。
text和range都不为空。 在文本range被删除并替换为text的变化。 添加新文本而不是旧文本,它在range的开头。 例如,当删除某些文本时,您可以通过设置新文本(setText("new text"))来简单地替换一些占位符文本,
变化是可变的,但不可观察。 它应该只用于一次变化的生命。 意图是将更改从格式化程序中修改。
- 从以下版本开始:
- JavaFX 8u40
-
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 TextFormatter.Changeclone()创建并返回此对象的副本。intgetAnchor()获得新的锚点。intgetCaretPosition()获得新的插入位置。ControlgetControl()获取与此更改相关联的控件。intgetControlAnchor()获取控件的当前锚定位置。intgetControlCaretPosition()获取控件的当前插入位置。StringgetControlNewText()获取完整的新文本,将在此更改后用于控件。StringgetControlText()这是控制在更改之前的全文。intgetRangeEnd()获取最终索引到TextInputControl.getText()进行修改。intgetRangeStart()获取起始索引到TextInputControl.getText()进行修改。IndexRangegetSelection()获取此更改的选择。StringgetText()获取此更改中使用的文本。booleanisAdded()获取此更改是否响应添加的文本。booleanisContentChange()内容更改是任何添加,删除或替换更改。booleanisDeleted()获取此更改是否正在删除文本。booleanisReplaced()获取此更改是否正在替换文本。voidselectRange(int newAnchor, int newCaretPosition)设置选择。voidsetAnchor(int newAnchor)设置锚点。voidsetCaretPosition(int newCaretPosition)设置插入位置。voidsetRange(int start, int end)一种将起始值和结束值分配在一起的方法,以确保它们相对于彼此有效。voidsetText(String value)设置在此更改中使用的文本。StringtoString()返回对象的字符串表示形式。
-
-
-
方法详细信息
-
getControl
public final Control getControl()
获取与此更改相关联的控件。- 结果
- 与此更改相关联的控件。 这将永远不会为空。
-
getRangeStart
public final int getRangeStart()
获取起始索引到TextInputControl.getText()进行修改。 这将永远是一个值> 0和<=TextInputControl.getLength()。- 结果
- 开始索引
-
getRangeEnd
public final int getRangeEnd()
获取最终索引到TextInputControl.getText()进行修改。 这将永远是一个值>getRangeStart()和<=TextInputControl.getLength()。- 结果
- 最终索引
-
setRange
public final void setRange(int start, int end)一种将起始值和结束值分配在一起的方法,以确保它们相对于彼此有效。 开始必须小于或等于结束。- 参数
-
start- 新的起始值。 必须是有效的起始值 -
end- 新的结束值。 必须是有效的结束值
-
getCaretPosition
public final int getCaretPosition()
获得新的插入位置。 该值始终为> 0,<=getControlNewText().getLength()}- 结果
- 新的插入位置
-
getAnchor
public final int getAnchor()
获得新的锚点。 该值始终为> 0,<=getControlNewText().getLength()}- 结果
- 新的职位
-
getControlCaretPosition
public final int getControlCaretPosition()
获取控件的当前插入位置。- 结果
- 以前的插入位置
-
getControlAnchor
public final int getControlAnchor()
获取控件的当前锚定位置。- 结果
- 以前的锚
-
selectRange
public final void selectRange(int newAnchor, int newCaretPosition)- 参数
-
newAnchor- 新的锚点位置 -
newCaretPosition- 新的插入位置
-
getSelection
public final IndexRange getSelection()
获取此更改的选择。 注意,选择范围是指getControlNewText(),而不是当前的控制文本。- 结果
- 这个变化的选定范围。
-
setAnchor
public final void setAnchor(int newAnchor)
- 参数
-
newAnchor- 新的职位
-
setCaretPosition
public final void setCaretPosition(int newCaretPosition)
- 参数
-
newCaretPosition- 新的插入位置
-
getText
public final String getText()
获取此更改中使用的文本。 例如,这可能是要添加的新文本,或正在替换开始和结束范围内的所有控件文本的文本。 通常,只有在删除范围的情况下,它才是空字符串。- 结果
- 涉及这一变化的案文。 这将永远不会为空。
-
setText
public final void setText(String value)
设置在此更改中使用的文本。 这用于替换从开始到结束的范围,如果这样的范围存在,或者在由start == end表示的位置插入文本。- 参数
-
value- 文字。 这不能为空。
-
getControlText
public final String getControlText()
这是控制在更改之前的全文。 要在此更改后获取文本,请使用getControlNewText()。- 结果
- 以前的控制文本
-
getControlNewText
public final String getControlNewText()
获取完整的新文本,将在此更改后用于控件。 请注意,某些控件(例如TextField)可能会在进行更改后进行进一步过滤(例如剥离换行符),以便您不能假定newText将与最终设置为控件上的内容完全相同,然而,假设为了计算新的插入位置和新的锚定位置(因为在控件剥离了控件可能剥离的任何附加字符之后,根据需要提供的值将被修改)是正确的。- 结果
- 根据为此Change对象设置的开始,结束和文本属性的状态,控件在此调用时提出新文本。
-
isAdded
public final boolean isAdded()
获取此更改是否响应添加的文本。 请注意,在更改对象由格式化程序(由其中一个setter)修改后,此方法的返回值不会更改。 它是否回答这个更改是否被添加文本的结果而被触发,而不是文本最终被添加到最后。- 结果
- 如果正在添加文本,则为true
-
isDeleted
public final boolean isDeleted()
获取此更改是否正在删除文本。 请注意,在更改对象由格式化程序(由其中一个setter)修改后,此方法的返回值不会更改。 它是否解释这个更改是否被删除文本的结果,而不是文本最终会被删除。- 结果
- 如果正在删除文本,则为true
-
isReplaced
public final boolean isReplaced()
获取此更改是否正在替换文本。 请注意,在更改对象由格式化程序(由其中一个setter)修改后,此方法的返回值不会更改。 它是否由于文本被替换而被触发了这个更改,而不是最终文本是否被替换。- 结果
- 如果正在替换文本,则为true
-
isContentChange
public final boolean isContentChange()
内容更改是任何添加,删除或替换更改。 基本上它是c.isAdded() || c.isDeleted()的捷径- 结果
- 如果内容改变,则为true
-
toString
public String toString()
描述从类别复制Object返回对象的字符串表示形式。 一般来说,toString方法返回一个字符串,“文本地表示”此对象。 结果应该是一个简明扼要的表达,容易让人阅读。 建议所有子类覆盖此方法。该
toString类方法Object返回一个由类的名称,其中所述对象是其实例,该符号字符`的字符串@”,并且对象的哈希码的无符号的十六进制表示。 换句话说,这个方法返回一个等于下列值的字符串:getClass().getName() + '@' + Integer.toHexString(hashCode())
-
clone
public TextFormatter.Change 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并且所述的返回类型clone数组类型的方法T[]是T[]其中T是任何引用或原始类型。 否则,该方法将创建该对象的类的新实例,并将其所有字段初始化为该对象的相应字段的内容,就像通过赋值一样。 这些字段的内容本身不被克隆。 因此,该方法执行该对象的“浅拷贝”,而不是“深度拷贝”操作。类
Object本身并不实现接口Cloneable,因此在类为Object的对象上调用clone方法将导致在运行时抛出异常。
-
-