Mặc định, JTextField cho phép nhập số, ký tự và ký tự đặc biệt. Việc kiểm tra dữ liệu đầu vào người dùng gõ vào JTextField có thể khó khăn, đặc biệt khi chuỗi nhập vào phải chuyển đổi thành giá trị số như int.
Trong ví dụ dưới đây, JTextField chỉ cho phép nhập giá trị số.
Ví dụ minh họa
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JTextFieldValidation extends JFrame {
JTextField tf;
Container container;
JLabel label;
public JTextFieldValidation() {
container = getContentPane();
setBounds(0, 0, 500, 300);
tf = new JTextField(25);
setLayout(new FlowLayout());
container.add(new JLabel("Enter the number"));
container.add(tf);
container.add(label = new JLabel());
label.setForeground(Color.red);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
tf.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent ke) {
String value = tf.getText();
int l = value.length();
if (ke.getKeyChar() >= '0' && ke.getKeyChar() <= '9') {
tf.setEditable(true);
label.setText("");
} else {
tf.setEditable(false);
label.setText("* Enter only numeric digits(0-9)");
}
}
});
setVisible(true);
}
public static void main(String[] args) {
new JTextFieldValidation();
}
}
Kết quả đầu ra
Chương trình hiển thị một ô nhập liệu. Khi người dùng gõ ký tự không phải số (0-9), ô nhập liệu sẽ bị khóa (không thể sửa) và hiển thị thông báo lỗi màu đỏ: "* Enter only numeric digits(0-9)".
Lưu ý: Cách này dùng KeyListener có nhược điểm là không chặn được việc dán (paste) văn bản. Cách tốt hơn là sử dụng DocumentFilter hoặc JFormattedTextField.