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;
}実行結果
エコー文字を表示している状態
チェックボックスが未選択の場合、入力内容はデフォルトのエコー文字(*)でマスクされて表示されます。

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

まとめ
JPasswordFieldのsetEchoChar()メソッドを使えば、エコー文字の変更やマスクの解除が簡単に行えます。ヌル文字('\u0000')を指定することでパスワードを平文表示でき、JCheckBoxと組み合わせることで、ユーザーが入力内容を確認できる「パスワード表示切り替え」機能を実装できます。ただし、実際のアプリケーションでは、画面の覗き見などを防ぐため、平文表示機能は必要最小限にとどめることが推奨されます。
-
Java SwingのJButtonでHTMLテキストを実装する方法
JButtonはAbstractButtonのサブクラスであり、Java Swingのコンポーネント階層において非常に重要な役割を担うクラスです。JButtonは、ログイン画面を持つアプリケーションなど、ユーザーに操作を促す場面で広く利用されています。ボタンを押下・クリックすると、ActionListenerインターフェースを通じてアクションイベントが発生し、それに応じた処理を実行できます。また、JButtonにはテキストのみ、アイコンのみ、あるいはテキストとアイコンの両方を設定することが可能です。さらに便利な点として、ボタンのラベルにHTMLタグを使用できるため、太字(bold)や斜体(it
-
JavaでJPanelのpaintComponent()メソッドを実装する方法をわかりやすく解説
JPanelはJavaにおける軽量コンテナであり、それ自体は不可視(インビジブル)なコンポーネントとして扱われます。デフォルトのレイアウトにはFlowLayoutが採用されています。JPanelを生成した後は、Containerクラスから継承されたadd()メソッドを呼び出すことで、ボタンやラベルなどの他のコンポーネントをJPanelオブジェクトに自由に追加できます。 paintComponent()メソッドとは このメソッドは、単なる背景色の描画にとどまらず、JPanel上に独自の図形や画像などを描画したい場合に必要となります。paintComponent()メソッドはすでにJPanelクラ