- 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.Change
clone()
创建并返回此对象的副本。int
getAnchor()
获得新的锚点。int
getCaretPosition()
获得新的插入位置。Control
getControl()
获取与此更改相关联的控件。int
getControlAnchor()
获取控件的当前锚定位置。int
getControlCaretPosition()
获取控件的当前插入位置。String
getControlNewText()
获取完整的新文本,将在此更改后用于控件。String
getControlText()
这是控制在更改之前的全文。int
getRangeEnd()
获取最终索引到TextInputControl.getText()
进行修改。int
getRangeStart()
获取起始索引到TextInputControl.getText()
进行修改。IndexRange
getSelection()
获取此更改的选择。String
getText()
获取此更改中使用的文本。boolean
isAdded()
获取此更改是否响应添加的文本。boolean
isContentChange()
内容更改是任何添加,删除或替换更改。boolean
isDeleted()
获取此更改是否正在删除文本。boolean
isReplaced()
获取此更改是否正在替换文本。void
selectRange(int newAnchor, int newCaretPosition)
设置选择。void
setAnchor(int newAnchor)
设置锚点。void
setCaretPosition(int newCaretPosition)
设置插入位置。void
setRange(int start, int end)
一种将起始值和结束值分配在一起的方法,以确保它们相对于彼此有效。void
setText(String value)
设置在此更改中使用的文本。String
toString()
返回对象的字符串表示形式。
-
-
-
方法详细信息
-
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
方法将导致在运行时抛出异常。
-
-