Computer >> Computer tutorials >  >> Programming >> Java

How can we show/hide the echo character of a JPasswordField in Java?


A JPasswordField is a subclass of JTextField and each character entered in a JPasswordField can be replaced by an echo character. This allows confidential input for passwords. By default, the echo character is the asterisk(*). The important methods of JPasswordField are get password(), getText(), getAccessibleContext() and etc. By default, JPasswordField can show the echo characters. We can hide the echo characters and show the original text to the use by click on JCheckBox.

Example

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;
}

Output

Show Echo Character

How can we show/hide the echo character of a JPasswordField in Java?


Hide Echo Character

How can we show/hide the echo character of a JPasswordField in Java?