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

JavaでJPasswordFieldのエコー文字を表示・非表示に切り替える方法

JPasswordFieldとは

JPasswordFieldは、Swingのテキスト入力コンポーネントであるJTextFieldのサブクラスです。このフィールドに入力された各文字は、エコー文字(マスク文字)に置き換えて表示されるため、パスワードなどの機密情報を安全に入力できます。

デフォルトのエコー文字はアスタリスク(*)です。JPasswordFieldの主なメソッドには、getPassword()getText()getAccessibleContext()などがあります。

エコー文字の表示・非表示を切り替える仕組み

デフォルト状態のJPasswordFieldは、入力内容をエコー文字でマスクして表示します。JCheckBoxのチェック状態に応じてsetEchoChar()メソッドを呼び出すことで、エコー文字を非表示にし、入力された本来のテキストをそのまま表示させることも可能です。

具体的には、チェックボックスが選択されたときにエコー文字としてヌル文字('\u0000')を設定するとマスクが解除され、選択解除されたときにUIManager.get("PasswordField.echoChar")から取得したデフォルトのエコー文字を再設定すると、マスク表示に戻ります。

サンプルコード

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public final class ShowJPasswordTest extends JPanel {
    private JPasswordField pf1;
    private JCheckBox jcb;
    private JPanel panel;

    public ShowJPasswordTest() {
        pf1 = makePasswordField();
        jcb = new JCheckBox("Show Passwords");
        jcb.addActionListener(ae -> {
            JCheckBox c = (JCheckBox) ae.getSource();
            pf1.setEchoChar(c.isSelected() ? '\u0000'
                : (Character) UIManager.get("PasswordField.echoChar"));
        });
        panel = new JPanel(new BorderLayout());
        panel.add(pf1);
        panel.add(jcb, BorderLayout.SOUTH);
        add(makeTitledPanel("Show/Hide Password", panel));
        setBorder(BorderFactory.createEmptyBorder(2, 5, 2, 5));
    }

    private static JPasswordField makePasswordField() {
        JPasswordField pf = new JPasswordField(20);
        pf.setText("tutorialspoint");
        pf.setAlignmentX(Component.RIGHT_ALIGNMENT);
        return pf;
    }

    private static Component makeTitledPanel(String title, Component cmp) {
        JPanel p = new JPanel(new GridBagLayout());
        p.setBorder(BorderFactory.createTitledBorder(title));
        GridBagConstraints c = new GridBagConstraints();
        c.weightx = 1d;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.insets = new Insets(5, 5, 5, 5);
        p.add(cmp, c);
        return p;
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Show/HidePasswordField Test");
        frame.getContentPane().add(new ShowJPasswordTest());
        frame.setSize(375, 250);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

enum PasswordField {
    SHOW, HIDE;
}

実行結果

エコー文字を表示している状態

チェックボックスが未選択の場合、入力内容はデフォルトのエコー文字(*)でマスクされて表示されます。

JavaでJPasswordFieldのエコー文字を表示・非表示に切り替える方法

エコー文字を非表示にした状態

「Show Passwords」チェックボックスを選択すると、マスクが解除され、入力されたパスワードが平文で表示されます。

JavaでJPasswordFieldのエコー文字を表示・非表示に切り替える方法

まとめ

JPasswordFieldのsetEchoChar()メソッドを使えば、エコー文字の変更やマスクの解除が簡単に行えます。ヌル文字('\u0000')を指定することでパスワードを平文表示でき、JCheckBoxと組み合わせることで、ユーザーが入力内容を確認できる「パスワード表示切り替え」機能を実装できます。ただし、実際のアプリケーションでは、画面の覗き見などを防ぐため、平文表示機能は必要最小限にとどめることが推奨されます。

  1. Java SwingのJButtonでHTMLテキストを実装する方法

    JButtonはAbstractButtonのサブクラスであり、Java Swingのコンポーネント階層において非常に重要な役割を担うクラスです。JButtonは、ログイン画面を持つアプリケーションなど、ユーザーに操作を促す場面で広く利用されています。ボタンを押下・クリックすると、ActionListenerインターフェースを通じてアクションイベントが発生し、それに応じた処理を実行できます。また、JButtonにはテキストのみ、アイコンのみ、あるいはテキストとアイコンの両方を設定することが可能です。さらに便利な点として、ボタンのラベルにHTMLタグを使用できるため、太字(bold)や斜体(it

  2. JavaでJPanelのpaintComponent()メソッドを実装する方法をわかりやすく解説

    JPanelはJavaにおける軽量コンテナであり、それ自体は不可視(インビジブル)なコンポーネントとして扱われます。デフォルトのレイアウトにはFlowLayoutが採用されています。JPanelを生成した後は、Containerクラスから継承されたadd()メソッドを呼び出すことで、ボタンやラベルなどの他のコンポーネントをJPanelオブジェクトに自由に追加できます。 paintComponent()メソッドとは このメソッドは、単なる背景色の描画にとどまらず、JPanel上に独自の図形や画像などを描画したい場合に必要となります。paintComponent()メソッドはすでにJPanelクラ