Java: JFormattedTextField
JFormattedTextField tương tự như JTextField khi xuất hiện. Nó chấp nhận các ký tự dựa trên việc sử dụng bộ định dạng. Các bộ định dạng khác nhau được phép là số, ngày tháng và tiền tệ.
Trong trường hợp ta sử dụng JTextField trong ứng dụng GUI thì ta sẽ phản hồi lại việc kiểm tra giá trị được điền vào TextField với định dạng thích hợp. Còn JFormattedTextField sẽ thuận tiện hơn để xác nhận tính hợp lệ của dữ liệu mà không cần phải có bất kỳ dòng code kiểm tra nào.
JFormattedTextField
JFormattdTextField với bộ định dạng số
Để sử dụng JFormattedTextField với bộ định dạng số thì ta thực hiện các bước sau:
- Khai báo một đối tượng của lớp NumberFormat.
- Khai báo một đối tượng của lớp JFormattedTextField.
- Sử dụng phương thức tĩnh NumberFormat.getNumberInstance() để tạo thể hiện của NumberFormat.
- Tạo thể hiện của JFormattedTextField và truyền thể hiện của NumberFormat dưới dạng đối số tới nó..
- Thêm thể hiện của JFormattedTextField tới bộ chứa.
Đoạn mã sau thể hiện cách tạo JFormattedTextField với bộ định dạng số và thêm nó vào frame.
NumberFormat numberFormat;
JFormattedTextField txfNumber;
JFrame frmDetails;
// Tạo thể hiện của đối tượng định dạng số
numberFormat = NumberFormat.getNumberInstance();
// Tạo trường văn bản có định dạng với bộ định dạng số
txfNumber = new JFormattedTextField(numberFormat);
// Rồi thêm vào frame
frmDetails.getContentPane().add(txfNumber);
JFormattdTextField với bộ định dạng ngày tháng
Các bước sử dụng JFormattedTextField với bộ định dạng ngày tháng như sau:
- Khai báo một đối tượng của lớp DateFormat.
- Khai báo một đối tượng của lớp JFormattedTextField.
- Sử dụng phương thức tĩnh DateFormat.getDateInstance() để tạo một thể hiện của lớp DateFormat.
- Tạo một thể hiện của JFormattedTextField và truyền thể hiện của DateFormat dưới dạng đối số tới phương thức tĩnh ở trên.
- Thêm thể hiện của JFormattedTextField vào bộ chứa.
Đoạn mã sau thể hiện cách tạo JFormattedTextField với bộ định dạng ngày tháng.
DateFormat dateFormat;
JFormattedTextField txfDate;
JFrame frmDetails;
...
// Tạo một thể hiện của đối tượng dateFormat
dateFormat = DateFormat.getDateInstance();
// Tạo trường văn bản có định dạng với bộ định dạng ngày tháng
txfDate = new JFormattedTextField(dateFormat);
// Rồi thêm vào frame
frmDetails.getContentPane().add(txfDate);
JFormattdTextField với bộ định dạng tùy chỉnh
Để tạo trường văn bản có định dạng với bộ định dạng tùy chỉnh thì ta sử dụng lớp MaskFormatter. MaskFormatter tạo một bộ định dạng để xác định chính xác những ký tự hợp lệ cho mỗi vị trí của trường văn bản có định dạng.
Bảng sau đây liệt kê các ký tự mask.
Ký tự mask | Mô tả |
---|---|
# | Một số bất kỳ |
` | Ký tự escape cho chuỗi escape |
U | Ký tự bất kỳ, được chuyển thành ký tự in hoa. |
L | Ký tự bất kỳ, được chuyển thành ký tự in thường. |
A | Ký tự hoặc số bất kỳ. |
? | Ký tự đơn bất kỳ. |
* | Một hoặc nhiều ký tự. |
H | Ký tự hệ 16 (0-9, a-f, or A-F). |
Đoạn mã sau mô tả cách tạo một trường văn bản có định dạng để chấp nhận 9 số.
JFormattedTextField txfAmount;MaskFormatter formatter;
try
{
formatter = new MaskFormatter(“###,###,###”);
}
catch (ParseException ex)
{
System.err.println(“Exception: “+ ex.getMessage());
System.exit(0);
}
txfAmount = new JFormattedTextField(formatter);
Ví dụ đầy đủ về ứng dụng cho JFormattedTextField xin xem tại bài viết ví dụ FormattedTextfieldDemo.