モジュール java.desktop
パッケージ javax.swing

クラスJFormattedTextField

java.lang.Object
すべての実装されたインタフェース:
ImageObserver, MenuContainer, Serializable, Accessible, Scrollable, SwingConstants

@JavaBean public class JFormattedTextField extends JTextField
JFormattedTextFieldJTextFieldを拡張して、任意の値をフォーマットしたり、ユーザーがテキストを編集したあとに特定のオブジェクトを取得したりするためのサポートを追加します。 JFormattedTextFieldの日付編集用の設定例を次に挙げます。
   JFormattedTextField ftf = new JFormattedTextField();
   ftf.setValue(new Date());
 

JFormattedTextFieldが一度生成されると、PropertyChangeListenerを追加し、プロパティ名valueを使用してPropertyChangeEventを待機することで、変更の編集を待機できます。

JFormattedTextFieldが、フォーカスを失ったときに実行するアクションを設定できます。 次の設定が用意されています。

JFormattedTextFieldの有効な構成とその説明
説明
JFormattedTextField.REVERT getValueの表示に合うように、表示を元に戻す。現在の編集は失われる可能性がある。
JFormattedTextField.COMMIT 現在の値を確定。 現在の値がAbstractFormatterによる正当な値ではなく、ParseExceptionがスローされる場合、値は変更されず、編集された値がそのまま残る。
JFormattedTextField.COMMIT_OR_REVERT COMMITとほぼ同じ。値が正当なものでない場合はREVERTと同様。
JFormattedTextField.PERSIST 何も処理しない。新しいAbstractFormatterの取得、値の更新、どちらも実行しない。
デフォルトはJFormattedTextField.COMMIT_OR_REVERTです。詳細については、setFocusLostBehavior(int)を参照してください。

JFormattedTextFieldは、現在編集中の値が不正な場合でも、フォーカスの移動が可能です。 JFormattedTextFieldの編集状態が不正な場合にフォーカスをロックするには、InputVerifierを接続します。 このようなInputVerifierを実装したコードの一部を例として挙げます。

 public class FormattedTextFieldVerifier extends InputVerifier {
     public boolean verify(JComponent input) {
         if (input instanceof JFormattedTextField) {
             JFormattedTextField ftf = (JFormattedTextField)input;
             AbstractFormatter formatter = ftf.getFormatter();
             if (formatter != null) {
                 String text = ftf.getText();
                 try {
                      formatter.stringToValue(text);
                      return true;
                  } catch (ParseException pe) {
                      return false;
                  }
              }
          }
          return true;
      }
      public boolean shouldYieldFocus(JComponent input) {
          return verify(input);
      }
  }
 

commitEditを呼び出すことでも値を確定できます。

JFormattedTextFieldはフォーマット自体を行いません。フォーマットは、JFormattedTextField.AbstractFormatterFactoryのインスタンスから取得されるJFormattedTextField.AbstractFormatterのインスタンスを介して行われます。 JFormattedTextField.AbstractFormatterのインスタンスは、アクティブになったときにinstallメソッドから通知を受け、JFormattedTextField.AbstractFormatterはその時点で必要なオブジェクト(通常はDocumentFilter)をインストールできます。 同様に、JFormattedTextFieldAbstractFormatterを必要としなくなった場合、uninstallを呼び出します。

JFormattedTextFieldは、通常、フォーカスを取得または喪失したときに、AbstractFormatに対するAbstractFormatterFactoryを照会します。 ただし、これはフォーカス喪失ポリシーに基づいて変更できます。 フォーカス喪失ポリシーがJFormattedTextField.PERSISTであり、JFormattedTextFieldが編集されている場合、AbstractFormatterFactoryは値が確定されるまで照会されません。 同様に、フォーカス消失ポリシーがJFormattedTextField.COMMITで、stringToValueから例外がスローされた場合、フォーカスが失われるか取得されたときにAbstractFormatterFactoryは問合せされません。

JFormattedTextField.AbstractFormatterは、確定値をJFormattedTextFieldに設定するタイミングも決定します。 JFormattedTextField.AbstractFormatterの中には、編集のたびに新しく値を生成するものもあり、まったく値を確定しないものもあります。 commitEditを呼び出すことで、現在の値を現在のJFormattedTextField.AbstractFormatterから強制的に取得できるようになります。commitEditJFormattedTextFieldで[Enter]を押すたびに呼び出されます。

AbstractFormatterFactoryが明示的に設定されていない場合で、値がnull以外のときには、setValueが呼び出されたあとに、値の型Classに基づいてこれが設定されます。 たとえば、次のコードでは、適切なAbstractFormatterFactoryAbstractFormatterが、数値のフォーマット処理のために生成されます。

   JFormattedTextField tf = new JFormattedTextField();
   tf.setValue(100);
 

警告: AbstractFormatterは、通常、DocumentDocumentFilterをインストールし、JFormattedTextFieldNavigationFilterをインストールするため、この2つを独自にインストールしないでください。 独自にインストールすると、動作が奇妙になり、AbstractFormatterの編集ポリシーが強化されなくなります。

警告: Swingはスレッドに対して安全ではありません。 詳細は、「Swing's Threading Policy」を参照してください。

警告: このクラスの直列化されたオブジェクトは、今後のSwingリリースと互換ではなくなる予定です。 現在の直列化のサポートは、短期間の格納や、同じバージョンのSwingを実行するアプリケーション間のRMIに適しています。 1.4では、すべてのJavaBeansの長期ストレージのサポートがjava.beansパッケージに追加されました。 XMLEncoderを参照してください。

導入されたバージョン:
1.4