JPasswordField는 JTextField의 하위 클래스로, 사용자가 입력하는 각 문자를 에코 문자(echo character)로 대체하여 화면에 표시합니다. 이러한 특성 덕분에 비밀번호처럼 외부에 노출되어서는 안 되는 기밀 정보를 안전하게 입력받을 수 있습니다. 기본 에코 문자는 별표(*)이며, 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;
}
실행 결과
에코 문자 표시 상태

에코 문자 숨김 상태 (원본 텍스트 표시)
