Lớp JPasswordField là lớp con của JTextField, cung cấp các trường kiểu text dành cho mật khẩu. Vì lý do bảo mật, trường mật khẩu không hiển thị các ký tự người dùng nhập vào. Thay vào đó, trường này sẽ hiển thị các ký tự khác nhau từ một kiểu duy nhất, như dấu hoa thị '*'. Đó là biện pháp phòng ngừa hữu hiệu, trường mật khẩu lưu trữ giá trị của nó như một mảng các ký tự, chứ không phải là chuỗi. Trường mật khẩu sẽ bắn một sự kiện khi người dùng nhập văn bạn hoàn tất và nhấn vào nút Enter.
Đây là hình ảnh của demo mở ra cửa sổ nhỏ nhắc nhở người dùng nhập mật khẩu.
Mật khẩu là "DOTNET". Mật khẩu này là ví dụ sử dụng phương thức xác thực an toàn. Bạn có thể tìm thấy mã này trong file tải đính kèm. Đây là mã tạo ra và thiết lập các trường mật khẩu
passwordField = new JPasswordField(10);
passwordField.setActionCommand(OK);
passwordField.addActionListener(this);
Đối số sẽ thông qua hàm dựng JPasswordField cho biết kích thước trong trường hợp này là 10. Theo mặc định, trường mật khẩu sẽ chỉ hiển thị dấu chấm vào mỗi ký tự gõ. Nếu bạn muốn thay đổi các ký tự, gọi phương thức setEchoChar. Các mã sau sẽ cho biết thêm hành động listener đến trường mật khẩu, nó sẽ kiểm tra giá trị nhập vào bởi người dùng. Đây là phương thức được sử dụng để thực hiện hành động listener của actionPerformed
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if (OK.equals(cmd)) { //Process the password.
char[] input = passwordField.getPassword();
if (isPasswordCorrect(input)) {
JOptionPane.showMessageDialog(controllingFrame,
"Success! You typed the right password.");
} else {
JOptionPane.showMessageDialog(controllingFrame,
"Invalid password. Try again.",
"Error Message",
JOptionPane.ERROR_MESSAGE);
}
//Zero out the possible password, for security.
Arrays.fill(input, '0');
passwordField.selectAll();
resetFocus();
} else ...//handle the Help button...
}
Lưu ý: Để tăng cường bảo mật, khi kết thúc trả lại ký tự bởi phương thức getpassword, bạn nên đặt mỗi phần tử của nó là 0. Đoạn mã trên cho thấy cách làm như vậy
Chương trình sử dụng trường mật khẩu sẽ cần xác nhận mật khẩu trước khi hoàn thành bất cứ hành động nào đều đòi hỏi phải có mật khẩu. Chương trình này gọi phương thức private isPasswordCorrect, nhằm so sánh giá trị trả về của phương thức getPassword đến một giá trĩ được lưu trữ trong mảng ký tự. Đây là dòng code của nó:
private static boolean isPasswordCorrect(char[] input) {
boolean isCorrect = true;
char[] correctPassword = { 'D', 'O', 'T', 'N', 'E', 'T' };
if (input.length != correctPassword.length) {
isCorrect = false;
} else {
isCorrect = Arrays.equals (input, correctPassword);
}
//Zero out the password.
Arrays.fill(correctPassword,'0');
return isCorrect;
}
Password Field API
Theo sau bảng danh sách dưới đây là các thành phần thường sử dụng các hàm dựng và phương thức JPasswordField.
Hàm dựng hoặc phương thức | Mục đích |
JPasswordField()
JPasswordField(String) JPasswordField(String, int) JPasswordField(int) JPasswordField(Document, String, int) | Tạo ra trường mật khẩu. Đối số int xác định đối số với độ rộng của cột. Đối số string xác định văn bản của trường này. Đối số Document cung cấp modal tùy chọn cho trường này |
char[] getPassword() | Trả về mật khẩu như mảng các ký tự |
void setEchoChar(char) char getEchoChar() | Thiết lập hoặc gán ký tự hiển thị thay vì các kiểu ký tự bởi người dùng |
void addActionListener(ActionListener) void removeActionListener(ActionListener) (được định nghĩa trong JTextField) | Thêm hoặc Xóa action listener |
void selectAll() (được định nghĩa trong JTextComponent ) | Chọn tất cả các ký tự trong trường mật khẩu |
Có thể tải ví dụ này trong bài này