Trong một vài tình huống cụ thể bạn cần phải giới hạn lại thông tin nhập của người dùng, có nhiều cách khác nhau để làm điều này như kiểm tra chìu dài rồi hiển thị thông báo nếu chiều dài vượt qua số ký tự cho phép, hoặc tự động cắt các ký tự dư thừa ra.
Tuy nhiên về phía người dùng hai cách này thì sẽ mang lại một chút khó chịu như khi bạn nhập thông tin thì bạn không mong muốn nó bị cắt bớt đi hoặc khi bạn nhập đã rồi khi save lại bị thông báo.
Vì vậy thiết kế chuẩn xuất là ngay tại text field bạn không cho phép người nhập nhập quá ký cho phép. Bài viết này sẽ hướng dẫn cách giới hạn số ký tự nhập trong JTextField của Java.
Sau khi tìm hiểu các giải pháp khác nhau thì tôi cho rằng giải pháp tạo một class JTextFieldLimit của rgagnon là chuẩn nhất và dễ sử dụng, source code JTextFieldLimit class như sau:
JTextFieldLimit.java
Việc sử dụng class này vô cùng đơn giản bạn chỉ việc set thuộc tính document cho JTextField là được, ví dụ như sau:
Tuy nhiên về phía người dùng hai cách này thì sẽ mang lại một chút khó chịu như khi bạn nhập thông tin thì bạn không mong muốn nó bị cắt bớt đi hoặc khi bạn nhập đã rồi khi save lại bị thông báo.
Vì vậy thiết kế chuẩn xuất là ngay tại text field bạn không cho phép người nhập nhập quá ký cho phép. Bài viết này sẽ hướng dẫn cách giới hạn số ký tự nhập trong JTextField của Java.
Sau khi tìm hiểu các giải pháp khác nhau thì tôi cho rằng giải pháp tạo một class JTextFieldLimit của rgagnon là chuẩn nhất và dễ sử dụng, source code JTextFieldLimit class như sau:
JTextFieldLimit.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package convertimagetobinaryimage;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
/**
*
* @author bnson
*/
public class JTextFieldLimit extends PlainDocument {
private int limit;
// optional uppercase conversion
private boolean toUppercase = false;
JTextFieldLimit(int limit) {
super();
this.limit = limit;
}
JTextFieldLimit(int limit, boolean upper) {
super();
this.limit = limit;
toUppercase = upper;
}
@Override
public void insertString(int offset, String str, AttributeSet attr)
throws BadLocationException {
if (str == null) {
return;
}
if ((getLength() + str.length()) <= limit) {
if (toUppercase) {
str = str.toUpperCase();
}
super.insertString(offset, str, attr);
}
}
}
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package convertimagetobinaryimage;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
/**
*
* @author bnson
*/
public class JTextFieldLimit extends PlainDocument {
private int limit;
// optional uppercase conversion
private boolean toUppercase = false;
JTextFieldLimit(int limit) {
super();
this.limit = limit;
}
JTextFieldLimit(int limit, boolean upper) {
super();
this.limit = limit;
toUppercase = upper;
}
@Override
public void insertString(int offset, String str, AttributeSet attr)
throws BadLocationException {
if (str == null) {
return;
}
if ((getLength() + str.length()) <= limit) {
if (toUppercase) {
str = str.toUpperCase();
}
super.insertString(offset, str, attr);
}
}
}
Việc sử dụng class này vô cùng đơn giản bạn chỉ việc set thuộc tính document cho JTextField là được, ví dụ như sau:
JTextField textField = JTextField();
textField.setDocument(new JTextFieldLimit(1));
textField.setDocument(new JTextFieldLimit(1));
No comments:
Post a Comment