モジュール javafx.controls
パッケージ javafx.scene.control

クラスTextFormatter.Change

  • すべての実装されたインタフェース:
    Cloneable
    含まれているクラス:
    TextFormatter<V>


    public static final class TextFormatter.Change
    extends Object
    implements Cloneable
    TextInputControlのコンテンツまたは選択内容の変更を表す状態が含まれます。 TextInputControlのテキストが変更されるたびに、TextInputControlに登録されているformatterにこのオブジェクトが渡されます。

    このクラスには、コントロールに対してどのような変更が行われたかを判別するための状態メソッドとコンビニエンス・メソッドが含まれます。 また、開発者がコントロールのその他の状態を問合せできるように、TextInputControlそのものへの参照も含まれています。 コントロールの状態をformatter handler内部から直接変更しないでください。

    テキストのChangeは、range (getRangeStart(), getRangeEnd()) and text (getText()によって記述されます。 次の3つのケースが考えられます。

    • 一部のテキストが削除された: この場合、textは空となり、rangeは削除されたテキストの範囲を示します。 たとえば、"Lorem ipsum dolor sit amet"というテキストで2番目の語を削除すると、rangeは(6,11)で、textは空になります。 同様に、別のテキストまたは追加のテキストを削除する場合は、rangeを設定します。 2番目の語ではなく最初の語を削除する場合は、setRange(0,5)を呼び出します
    • 一部のテキストが追加された: この場合、rangeは空ですが(何も削除されていない)、その値はまだ重要です。 rangeの開始と終了はどちらも、新しいテキストが追加された索引を指します。 たとえば、"Lorem dolor sit amet"に"ipsum"を追加すると、rangeが(6,6)に変更され、textに文字列"ipsum"が追加されます。
    • 一部のテキストが置換された: 前述の2つのケースの組合せ。 textrangeはどちらも空ではありません。 Changeではrangeのテキストが削除されてtextで置換されます。 古いテキストのかわりに新しいテキストがrangeの先頭に追加されます。 たとえば、一部のテキストが削除する場合、新しいテキスト(setText("new text"))を設定して、プレースホルダ・テキストでそれを置換するだけです

    Changeは変更可能ですが、監視可能ではありません。 これは、1つの変更の存続期間のみ使用できます。 Changeはフォーマッタ内部から変更することが意図されています。

    導入されたバージョン:
    JavaFX 8u40
    • メソッドのサマリー

      すべてのメソッド インスタンス・メソッド 具象メソッド 
      修飾子と型 メソッド 説明
      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​()
        この変更に関連付けられたコントロールを取得します。
        戻り値:
        この変更に関連付けられたコントロール。 nullは不可。
      • 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​()
        この変更で使用するテキストを取得します。 たとえば、追加される新しいテキストや、開始から終了までの範囲内のコントロールのテキスト全部を置換するテキストなどです。 通常、範囲が削除される場合のみ、これは空の文字列になります。
        戻り値:
        この変更に関連するテキスト。 nullは不可。
      • setText

        public final void setText​(String value)
        この変更で使用するテキストを設定します。 これは、開始から終了までの範囲が存在する場合にその範囲を置換する場合や、start == endで表される位置にテキストを挿入する場合に使用します。
        パラメータ:
        value - テキスト。 nullを指定することはできません。
      • getControlText

        public final String getControlText​()
        これは変更前のコントロールの全文です。 この変更後にテキストを取得するには、getControlNewText()を使用します。
        戻り値:
        コントロールの前のテキスト
      • getControlNewText

        public final String getControlNewText​()
        この変更後にコントロールで使用される新しいテキスト全部を取得します。 コントロール(TextFieldなど)によっては、(改行を取り除くなど)変更の実行後に追加のフィルタ処理を行うものもあるため、コントロールにコンテンツとして最終的に設定されるテキストがnewTextになると想定することはできませんが、新しいキャレット位置および新しいアンカー位置を計算する目的では、これを想定することは間違いではありません(コントロールが追加の文字を取り除いた後で、提供されたこれらの値が必要に応じて変更されるため)。
        戻り値:
        コントロールは、このコールの時点で、このChangeオブジェクトでstart、endおよびtextプロパティに設定された状態に基づいて新しいテキストを提示します。
      • isAdded

        public final boolean isAdded​()
        この変更がテキストの追加に対応して行われたかどうかを取得します。 フォーマッタ(セッターの1つ)によってChangeオブジェクトが変更された後で、このメソッドの戻り値が変更されることはありません。 最終的にテキストが追加されるかどうかではなく、この変更がテキストの追加の結果として起動されたかどうかに関する答えが返されます。
        戻り値:
        テキストが追加された結果であった場合は、true
      • isDeleted

        public final boolean isDeleted​()
        この変更がテキストの削除に対応して行われたかどうかを取得します。 フォーマッタ(セッターの1つ)によってChangeオブジェクトが変更された後で、このメソッドの戻り値が変更されることはありません。 最終的にテキストが削除されるかどうかではなく、この変更がテキストの削除の結果として起動されたかどうかに関する答えが返されます。
        戻り値:
        テキストが削除された結果であった場合は、true
      • isReplaced

        public final boolean isReplaced​()
        この変更がテキストの置換に対応して行われたかどうかを取得します。 フォーマッタ(セッターの1つ)によってChangeオブジェクトが変更された後で、このメソッドの戻り値が変更されることはありません。 最終的にテキストが置換されるかどうかではなく、この変更がテキストの置換の結果として起動されたかどうかに関する答えが返されます。
        戻り値:
        テキストが置換された結果であった場合は、true
      • isContentChange

        public final boolean isContentChange​()
        コンテンツの変更は、追加、削除または置換変更のいずれかです。 基本的に、これはc.isAdded() || c.isDeleted() のショートカットです。
        戻り値:
        コンテンツが変更された場合はtrue
      • toString

        public String toString​()
        次のクラスからコピーされた説明: Object
        オブジェクトの文字列表現を返します。 一般に、toStringメソッドは、このオブジェクトをテキストで表す文字列を返します。 この結果は、人間が読める簡潔で有益な情報であるべきです。 すべてのサブクラスで、このメソッドをオーバーライドすることをお勧めします。

        クラスObjecttoStringメソッドは、オブジェクトがインスタンスになっている元のクラスの名前、アットマーク文字@、およびオブジェクトのハッシュ・コードの符号なし16進数表現から構成される文字列を返します。 つまり、このメソッドは次の値と等しい文字列を返します。

         getClass().getName() + '@' + Integer.toHexString(hashCode())
         
        オーバーライド:
        toString 、クラス:  Object
        戻り値:
        このオブジェクトの文字列表現
      • clone

        public TextFormatter.Change clone​()
        次のクラスからコピーされた説明: Object
        このオブジェクトのコピーを作成して、返します。 コピーの正確な意味合いは、オブジェクトのクラスによって異なります。 一般的な意図は、任意のオブジェクトxについて、次の式
         x.clone() != x
        がtrueであり、次の式
         x.clone().getClass() == x.getClass()
        trueになることですが、これらは絶対的な要件ではありません。 また次の式
         x.clone().equals(x)
        trueになりますが、これは絶対的な要件ではありません。

        慣例上、返されたオブジェクトは、super.cloneを呼び出すことによって取得するようにしてください。 クラスとそのすべてのスーパー・クラス(Objectを除く)がこの規則に従っている場合は、x.clone().getClass()== x.getClass()が成立します。

        通常、このメソッドにより返されるオブジェクトは、このオブジェクト(複製されています)から独立している必要があります。 この独立性を実現するには、super.cloneによって返されたオブジェクトを返す前に、その1つ以上のフィールドを変更することが必要になる場合があります。 これは、通常、複製するオブジェクトの内部深層構造を構成する可変オブジェクトのコピー、およびこれらのオブジェクトへの参照をコピーへの参照に置き換えることを意味します。 クラスにプリミティブ・フィールドまたは不変オブジェクトへの参照しか含まれていない場合は、通常、super.cloneによって返されたオブジェクト内のフィールドを変更する必要がありません。

        クラスObjectのメソッドcloneは、特定のクローニング操作を実行します。 まず、このオブジェクトのクラスがインタフェースCloneableを実装していない場合は、CloneNotSupportedExceptionがスローされます。 すべての配列がインタフェースCloneableを実装していると見なされること、および配列型T[]cloneメソッドの戻り値の型はT[] (ここで、Tは任意の参照またはプリミティブ型)です。 実装していない場合、このメソッドはこのオブジェクトのクラスの新しいインスタンスを生成し、そのフィールドをすべて、このオブジェクトの対応する各フィールドの内容で初期化します。これは代入と同様で、フィールドの内容自身が複製されるのではありません。 つまりこのメソッドは、オブジェクトのシャロー・コピーを生成しますが、ディープ・コピーは生成しません。

        クラスObject自体はインタフェースCloneableを実装していないため、クラスがObjectであるオブジェクトに対してcloneメソッドを呼び出すと、実行時に例外がスローされます。

        オーバーライド:
        clone、クラス: Object
        戻り値:
        このインスタンスの複製。
        関連項目:
        Cloneable