Mục lục
JPasswordField là một component trong Java Swing cho phép nhập và chỉnh sữa một đoạn văn bản trên cùng một dòng tuy nhiên những gì người dùng nhập sẽ bị ẩn khởi màn hình ứng dụng.
JPasswordField là một công cụ khá hữu hiệu để bạn có thể làm một ô nhập mật khẩu đăng nhập, đăng ký người dùng, hay những thông tin quan trọng như mã số thẻ ngân hàng, CVV/CVC, etc.
Một điểm lưu ý nữa là JPasswordField thừa kế từ JTextField nên nó có hầu hết các tính năng của thằng cha, các bạn có thể tham khảo qua JTextField để có cái nhìn tổng quát hơn.
Khởi tạo JPasswordField
JPasswordField cung cấp một số constructor hỗ trợ khởi tạo một đối tượng JPasswordField:
- JPasswordField() – Khởi tạo một JPasswordField rỗng.
- JPasswordField(int columns) – Khởi tạo một JPasswordField rỗng với số lượng cột được chỉ định, số lượng cột này được dùng để tính toán chiều rộng của JTextField.
- JPasswordField(String Password, int columns) – Khởi tạo một JPasswordField với giá trị ban đầu là Password và số lượng cột được chỉ định.
- JPasswordField(Document doc, String Password, int columns) – Khởi tạo JPasswordField sử dụng mô hình lưu trữ văn bản đã cho và số cột nhất định.
Một số hàm thường xuyên sử dụng trong JPasswordField:
- char getEchoChar() – Trả về ký tự được dùng để tượng trưng cho các ký tự thay thế gía trị thật bên dưới.
- setEchoChar(char c) – Gán ký tự được dùng để thay thế giá trị thật.
- String getPassword() – Lấy giá trị thật mà người dùng nhập trong JPasswordTextField.
- String getText() – Lấy giá trị thật mà người dùng nhập trong JPasswordTextField
Ví dụ tạo Form Login
Ví dụ sau mình sẽ tạo một form login gồm Username, và Password. Trong đó dữ liệu của Password của người dùng nhập vào sẽ bị ẩn khỏi màn hình và xuất ra màn hình console.
import javax.swing.*; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; import java.awt.*; public class Main{ public static void main(String[] args) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); frame.setLayout(new GridLayout(2, 2)); JLabel label = new JLabel("User Name:", SwingConstants.LEFT); JLabel label2 = new JLabel("Password:", SwingConstants.LEFT); JTextField userNameField = new JTextField(20); JPasswordField passwordField = new JPasswordField(); // Xu ly su kien moi khi nguoi dung nhap mat khau passwordField.addCaretListener(new CaretListener() { @Override public void caretUpdate(CaretEvent e) { System.out.println("Mat khau:" + String.valueOf(passwordField.getPassword())); } }); frame.add(label); frame.add(userNameField); frame.add(label2); frame.add(passwordField); frame.setSize(300, 100); frame.setLocationRelativeTo(null); frame.setVisible(true); } }
Màn hình console sẽ hiển thị
Mat khau: Mat khau:1 Mat khau:12 Mat khau:123 Mat khau:1231 Mat khau:12312 Mat khau:123123
Đổi ký tự đại diện trong JPasswordField
Mặc định ký tự đại diện trong JPasswordField dùng để ẩn nội dung thật là dấu chấm như trên, giả sử chúng ta muốn đổi nó thành ‘@’ thì có thể sử dụng setEchoChar() method.
import javax.swing.*; import java.awt.*; public class Main{ public static void main(String[] args) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); frame.setLayout(new GridLayout(2, 2)); JLabel label = new JLabel("User Name:", SwingConstants.LEFT); JLabel label2 = new JLabel("Password:", SwingConstants.LEFT); JTextField userNameField = new JTextField(20); JPasswordField passwordField = new JPasswordField(); passwordField.setEchoChar('@'); frame.add(label); frame.add(userNameField); frame.add(label2); frame.add(passwordField); frame.setSize(300, 100); frame.setLocationRelativeTo(null); frame.setVisible(true); } }
Xử lý sự kiện trong JPasswordTextField
Chúng ta có thể xử lý sự kiện khi người dùng thao tác trên JPasswordTextField như người dùng đang nhập liệu với keyPress đang nhấn, keyTyped đã gõ và keyReleased hoàn tất gõ với addKeyListener() method.
import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; public class Main{ public static void main(String[] args) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); frame.setLayout(new GridLayout(2, 2)); JPasswordField passwordField = new JPasswordField(); passwordField.addKeyListener(new KeyListener() { @Override public void keyTyped(KeyEvent event) { System.out.println("key typed"); } @Override public void keyReleased(KeyEvent event) { System.out.println("key released"); } @Override public void keyPressed(KeyEvent event) { System.out.println("key pressed"); } }); frame.add(passwordField); frame.setSize(300, 100); frame.setLocationRelativeTo(null); frame.setVisible(true); } }
Output:
key pressed key typed key released key pressed key typed key pressed key typed key released key released key pressed key typed key released key pressed
Nguồn tham khảo
https://www.geeksforgeeks.org/java-swing-jpasswordfield/