Java
 Computer >> コンピューター >  >> プログラミング >> Java

【Java Swing】JTextFieldとJFormattedTextFieldの違いを徹底解説

Swingには、テキスト入力を受け付けるコンポーネントとして JTextFieldJFormattedTextField の2種類があります。JTextField はプレーンなテキストをそのまま入力するためのものである一方、JFormattedTextFieldJTextField を継承したクラスで、電話番号・メールアドレス・日付などの特定の書式(フォーマット)を入力内容に適用できる点が大きな特徴です。

JTextFieldとは

  • JTextField は、ユーザーが1行のテキストを入力できる、Swingの中でも最も重要なコンポーネントの一つです。
  • テキストフィールド内に入力を行うと ActionListener インターフェースが発生し、キャレット(いわゆるカーソル)の位置が変化するたびに CaretListener インターフェースが発生します。
  • また、MouseListenerKeyListener といったインターフェースにも対応しており、マウス操作やキー入力に対する柔軟なイベント処理が可能です。

JTextFieldのサンプルコード

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JTextFieldTest extends JFrame {
    JTextField jtf;
    public JTextFieldTest() {
        setTitle("JTextField Test");
        setLayout(new FlowLayout());
        jtf = new JTextField(15);
        add(jtf);
        jtf.addActionListener(new ActionListener() {
            public void actionPerformed (ActionEvent ae) {
                System.out.println("Event generated: " + jtf.getText());
            }
        });
        setSize(375, 250);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
    }
    public static void main(String args[]) {
        new JTextFieldTest();
    }
}

実行結果

【Java Swing】JTextFieldとJFormattedTextFieldの違いを徹底解説

JFormattedTextFieldとは

  • フォーマット付きテキストフィールドは、JTextField の直接のサブクラスである JFormattedTextField クラスのインスタンスとして作成します。
  • JFormattedTextField は見た目こそ通常のテキストフィールドとほぼ同じですが、ユーザーが入力する文字の有効性(妥当性)を制御できる点が異なります。入力可能な文字を定義した フォーマッター を関連付けることで、誤った形式の入力を防ぐことができます。
  • JFormattedTextFieldFormatクラス をベースにフォーマット付きテキストフィールドを構築します。まずフォーマッターを作成し、必要に応じてカスタマイズした上で、Format 型の引数を受け取る JFormattedTextField(Format format) コンストラクタを呼び出して利用します。

JFormattedTextFieldのサンプルコード

import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
public class JFormattedTextFieldTest extends JFrame {
    JFormattedTextField jftf;
    MaskFormatter mf;
    public JFormattedTextFieldTest() {
        setTitle("JFormattedTextField Test");
        setLayout(new FlowLayout());
        // 電話番号用のフォーマッター - (国コード)-(市外局番)-(番号)
        try {
            mf = new MaskFormatter("##-###-#######");
            mf.setPlaceholderCharacter('#');
            jftf = new JFormattedTextField(mf);
            jftf.setColumns(12);
        } catch(Exception e) {
            e.printStackTrace();
        }
        add(jftf);
        setSize(375, 250);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }
    public static void main(String args[]) {
        new JFormattedTextFieldTest();
    }
}

実行結果

【Java Swing】JTextFieldとJFormattedTextFieldの違いを徹底解説

このように、単純な自由入力なら JTextField、郵便番号や電話番号、日付など決まった書式での入力を強制したい場合には JFormattedTextFieldMaskFormatter との組み合わせ)を使い分けることで、より使いやすく堅牢なGUIアプリケーションを構築できます。

  1. JavaのJFrameとJDialogの違いとは?特徴と使い分けを解説

    JavaのSwingには、ウィンドウを表示するためのトップレベルコンテナとしてJFrameとJDialogが用意されています。どちらもよく似た役割を持ちますが、動作や用途には重要な違いがあります。この記事では、それぞれの特徴をサンプルコードとともに解説し、最後に使い分けのポイントをまとめます。 JFrameとは フレームに追加されたコンポーネントは「コンテンツ」として扱われ、contentPaneによって管理されます。JFrameにコンポーネントを追加する際は、フレーム本体ではなくcontentPaneに対して追加する必要があります。 JFrameは、タイトル、境界線、(オプションで)メニュ

  2. JavaのGridLayoutとGridBagLayoutの違いを徹底解説!特徴と使い分けのポイント

    JavaのAWT/Swingには複数のレイアウトマネージャーが用意されていますが、その中でもGridLayoutとGridBagLayoutは、コンポーネントを格子状(グリッド)に配置するという点でよく似ています。しかし、両者には重要な違いがあります。 GridLayoutは、すべてのコンポーネントを矩形のグリッド内に配置し、領域を同じサイズの長方形に分割して、各コンポーネントをそれぞれのセルの中に収めます。一方、GridBagLayoutは柔軟性の高いレイアウトマネージャーであり、コンポーネントのサイズを揃えることなく、縦方向・横方向に整列させて配置できます。各GridBagLayoutオブ