Module  javafx.controls
软件包  javafx.scene.control

Class 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个以上的组合。 textrange都不为空。 在文本range被删除并替换为text的变化。 添加新文本而不是旧文本,它在range的开头。 例如,当删除某些文本时,您可以通过设置新文本( setText("new text") )来简单地替换一些占位符文本,

    变化是可变的,但不可观察。 它应该只用于一次变化的生命。 意图是将更改从格式化程序中修改。

    从以下版本开始:
    JavaFX 8u40
    • 方法详细信息

      • getControl

        public final Control getControl​()
        获取与此更改相关联的控件。
        结果
        与此更改相关联的控件。 这将永远不会为空。
      • 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)
        设置选择。 锚点和插入位置值必须> 0和<= getControlNewText() .getLength()}。 请注意,这里有一个顺序依赖,因为在指定新文本后应该指定位置。
        参数
        newAnchor - 新的锚点位置
        newCaretPosition - 新的插入位置
      • getSelection

        public final IndexRange getSelection​()
        获取此更改的选择。 注意,选择范围是指getControlNewText() ,而不是当前的控制文本。
        结果
        这个变化的选定范围。
      • setAnchor

        public final void setAnchor​(int newAnchor)
        设置锚点。 锚点值必须大于0且<= getControlNewText() .getLength()}。 请注意,这里有一个顺序依赖,因为在指定新文本之后应该指定该位置。
        参数
        newAnchor - 新的职位
      • setCaretPosition

        public final void setCaretPosition​(int newCaretPosition)
        设置插入位置。 插入位置值必须大于0且<= getControlNewText() .getLength()}。 请注意,这里有一个顺序依赖,因为在指定新文本之后应该指定该位置。
        参数
        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())
         
        重写:
        toStringObject
        结果
        对象的字符串表示形式。
      • 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方法将导致在运行时抛出异常。

        重写:
        cloneObject
        结果
        这个实例的一个克隆。
        另请参见:
        Cloneable