Java: Cách sử dụng Password Field


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

Lớp JPasswordField là một lớp con của JTextField có nhiệm vụ cung cấp trường văn bản dùng để nhập mật khẩu (password), đó là password field. Vì lý do bảo mật mà password field không hiển thị các ký tự do người dùng điền vào, thay vào đó là các ký tự thay thế gồm các dấu chấm. Để đảm bảo tính bảo mật hơn nữa thì password field sẽ lưu các giá trị của nó dưới dạng một mảng các ký tự thay vì một chuỗi. Cũng tương tự text field thì password field sẽ kích hoạt một action event khi người dùng điền xong văn bản và nhấn Enter.

Toàn bộ ví dụ về trường password các bạn có thể xem tại phần PasswordDemo.

Hình dưới đây minh họa về cách thức xuất hiện của trường password khi người dùng soạn ký tự vào.

A snapshot of PasswordDemo, which uses a password field

Dưới đây là đoạn mã ví dụ dùng để tạo và thiết lập password field:

passwordField = new JPasswordField(10);
passwordField.setActionCommand(OK);
passwordField.addActionListener(this);

Đối số truyền vào hàm tạo JPasswordField là kích thước của trường, giá trị 10 tương ứng với độ rộng là 10 cột. Mặc định thì một trường password sẽ hiển thị các ký tự trong nó dưới dạng các dấu chấm đậm, nếu bạn muốn thay đổi điều này thì bạn sử dụng phương thức setEchoChar. Đoạn mã sau đây sẽ thêm một action listener tới trường password, trường này sẽ kiểm tra giá trị mà người dùng đã soạn. Đây là sự thực thi của phương thức actionPerformed của action listener:

public void actionPerformed(ActionEvent e) {
    String cmd = e.getActionCommand();

    if (OK.equals(cmd)) { //Xử lý mật khẩu.
        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);
        }

        //Không hiện mật khẩu cụ thể để bảo mật.
        Arrays.fill(input, '0');

        passwordField.selectAll();
        resetFocus();
    } else ...//xử lý nút lệnh Help...
}


Lưu ý bảo mật: Để nâng cao tính bảo mật thì mỗi khi bạn kết thúc với mảng ký tự được trả về từ phương thức getPassword thì bạn cần thiết lập từng phần tử một về 0. Đoạn mã ngay bên trên dùng để thực hiện điều này.

Một chương trình mà sử dụng trường password nói chung trước tiên sẽ kiểm tra tính hợp lệ của mật khẩu trước khi hoàn thành bất kỳ một hành động nào mà yêu cầu mật khẩu đó. Chương trình sau đây sẽ gọi một phương thức private là isPasswordCorrect, phương thức này sẽ so sánh giá trị trả về từ phương thức getPassword với giá trị được lưu trong mảng ký tự:

private static boolean isPasswordCorrect(char[] input) {
    boolean isCorrect = true;
    char[] correctPassword = { 'b', 'u', 'g', 'a', 'b', 'o', 'o' };

    if (input.length != correctPassword.length) {
        isCorrect = false;
    } else {
        isCorrect = Arrays.equals (input, correctPassword);
    }

    //Zero out the password.
    Arrays.fill(correctPassword,'0');

    return isCorrect;
}

API Password Field

Bảng sau đây liệt kê các hàm tạo và phương thức của JPasswordField. Bạn có thể xem thêm thông tin từ API Text Field qua bài viết Cách sử dụng Text Fields.

Hàm tạo và phương thức phổ biến của JPasswordField
Hàm tạo/Phương thức Mô tả
JPasswordField()
JPasswordField(String)
JPasswordField(String, int)
JPasswordField(int)
JPasswordField(Document, String, int)
Tạo một trường password. Đối số int xác định số cột, đối số String chứa văn bản khởi tạo, đối số Document cung cấp model tùy chỉnh cho trường.
char[] getPassword() Trả về mật khẩu dưới dạng mảng các ký tự.
void setEchoChar(char)
char getEchoChar()
Thiết lập hoặc lấy ký tự thay thế cho những ký tự đoạn người dùng điền vào.
void addActionListener(ActionListener)
void removeActionListener(ActionListener)
(được định nghĩa trong JTextField)
Thêm hoặc bớt một action listener.
void selectAll()
(được định nghĩa trong JTextComponent)
Chọn tất cả các ký tự trong trường password.

Các ví dụ có sử dụng Password Field

» Tiếp: Cách sử dụng Slider (JSlider)
« Trước: Cách sử dụng Panel
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!