パスワードフィールドの作成と列数(幅)の設定

パスワードフィールドを作成するには JPasswordField クラスを使用します。ここでは JPasswordField クラスの定義やコンストラクトについて確認します。またパスワードフィールドの列数(幅)を設定する方法も解説します。

(2022 年 04 月 11 日公開 / 2022 年 04 月 11 日更新)

JPasswordFieldクラスの定義

JPasswordField クラスは次のように定義されています。

java.lang.Object
  java.awt.Component
    java.awt.Container
      javax.swing.JComponent
        javax.swing.text.JTextComponent
          javax.swing.JTextField
            javax.swing.JPasswordField

public class JPasswordField
extends JTextField

パスワードフィールドはテキストフィールドのサブクラスとなっており、一部機能を拡張したものです。その為、多くのメソッドなどはテキストフィールドと同じものが利用できます。

JPasswordFieldクラスのコンストラクタ

JPasswordField クラスをを利用するにはコンストラクタを使って JPasswordField クラスのオブジェクトを作成します。次のようなコンストラクタが用意されています。

JPasswordField()

新しいJPasswordFieldを構築します。デフォルトのドキュメントを使用し、テキスト文字列はnullで開始します。列の幅は0です。

JPasswordField(int columns)

指定された列数で新規の空のJPasswordFieldを構築します。

JPasswordField(String text)

指定されたテキストで初期化された新しいJPasswordFieldを構築します。

JPasswordField(String text, int columns)

指定されたテキストおよび列で初期化される新規JPasswordFieldを構築します。

JPasswordField(Document doc, String txt, int columns)

指定されたテキスト・ストレージ・モデルと列数を使用する新規のJPasswordFieldを構築します。

コンストラクタは JTextField クラスの場合と同じで、パスワードフィールドに初期値を設定するかどうか、またパスワードフィールドの列数を設定するかどうかでコンストラクタを選択してください。ただパスワードフィールドの場合、初期値を設定する機会はあまりないかもしれません。

次のコンストラクタでは初期値が null で列数が 0 のパスワードフィールドを作成します。

public JPasswordField()

新しいJPasswordFieldを構築します。デフォルトのドキュメントを使用し、テキスト文字列はnullで開始します。列の幅は0です。

列が 0 では利用者がテキストを入力できないのでメソッドを使って列数を設定してから使用します。パスワードフィールドに列数を設定するには JPasswordField クラスの親クラスである JTextField クラスで用意されている setColumns メソッドを使います。

public void setColumns(int columns)

このTextFieldの列数を設定し、配置を無効にします。

パラメータ:
columns - 列数>= 0

例外:
IllegalArgumentException - columnsが0より小さい場合

引数にはテキストフィールドの見た目のサイズを決定するための列数を指定します。

実際の使い方は次のようになります。

JPasswordField pass = new JPasswordField();
pass.setColumns(10);

-- --

またパスワードフィールドを列数を指定して作成するには次のコンストラクタを使用します。

public JPasswordField(int columns)

指定された列数で新規の空のJPasswordFieldを構築します。 デフォルト・モデルが作成され、初期文字列はnullに設定されます。

パラメータ:
columns - 列数>= 0

引数にはパスワードフィールドの見た目のサイズを決定するための列数を指定します。

パスワードフィールドの列数とは文字数と考えてください。例えば 10 と指定すれば 10文字分の文字が表示できるだけの幅となります。ただし 文字はそれぞれ幅が違うので、どんな文字でも 10 文字ぴったりとなるわけではありません。またあくまで見た目のサイズなので入力できる文字数とは関係がありません。フォントの設定によっても実際のサイズは変わってくるので、厳密にピクセル単位でサイズを指定するには別のページで解説する setPreferredSize メソッドを使います。

実際の使い方は次のようになります。

JPasswordField pass = new JPasswordField(10);

サンプルプログラム

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample1_1.java という名前で保存します。

import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JPanel;
import java.awt.Container;
import java.awt.BorderLayout;

class JSample1_1 extends JFrame{
  public static void main(String args[]){
    JSample1_1 frame = new JSample1_1("MyTitle");
    frame.setVisible(true);
  }

  JSample1_1(String title){
    setTitle(title);
    setBounds(100, 100, 600, 400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPasswordField pass1 = new JPasswordField();
    pass1.setColumns(20);
    JPasswordField pass2 = new JPasswordField(10);

    JPanel p = new JPanel();
    p.add(pass1);
    p.add(pass2);

    Container contentPane = getContentPane();
    contentPane.add(p, BorderLayout.CENTER);
  }
}

次のようにコンパイルを行います。

javac JSample1_1.java

JPasswordFieldクラスのコンストラクタ(1)

コンパイルが終わりましたら実行します。

java JSample1_1

パスワードフィールドを 3 つ追加しました。 1 つ目は引数なしのコンストラクタで作成したパスワードフィールドにあとから列数を設定したもの、 2 つ目は列数を指定して作成したパスワードフィールドフィールドです。

JPasswordFieldクラスのコンストラクタ(2)

見た目はテキストフィールドと区別がつきません。ただパスワードフィールドはテキストフィールドと同じように利用者がテキストを入力することができますが、入力された文字はマスクされてどんな文字が入力されたのか分からないようになっています。このため、パスワードなどの他の利用者に見られたくないテキストを入力する場合に適したコンポーネントです。

JPasswordFieldクラスのコンストラクタ(3)

-- --

JPasswordField クラスの定義やコンストラクトについて確認し、パスワードフィールドの列数(幅)を設定する方法も解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。