این نمونه کدی که فقط عدد تا سقف 500 قبول میکنه (عدد منفی هم قبول میکنه).
با DocumentFilter نوشته شده و بر حسب ویژگی مورد نظرتون کافیه تابع valid که نوشتم رو تغییر بدید
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.text.AbstractDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.DocumentFilter;
public class Main extends JFrame {
public Main() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextField textFieldOne = new JTextField();
Document textDocOne = textFieldOne.getDocument();
DocumentFilter filterOne = new CheckRange();
((AbstractDocument) textDocOne).setDocumentFilter(filterOne);
add(textFieldOne);
setSize(300, 75);
}
public static void main(String[] args) {
Main window = new Main();
window.setVisible(true);
}
private class CheckRange extends DocumentFilter {
int RANGE_MAX = 500;
@Override
public void insertString(DocumentFilter.FilterBypass fb, int offset, String text,
AttributeSet attr) throws BadLocationException {
if (valid(fb, offset, WIDTH, text)) {
super.insertString(fb, offset, text, attr);
}
}
@Override
public void remove(DocumentFilter.FilterBypass fb, int offset, int length)
throws BadLocationException {
super.remove(fb, offset, length);
}
@Override
public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text,
AttributeSet attrs) throws BadLocationException {
if (valid(fb, offset, length, text)) {
super.replace(fb, offset, length, text, attrs);
}
}
//Validate
boolean valid(FilterBypass fb, int offset, int length, String text) throws BadLocationException{
boolean valid = false;
text = text.trim();
String newStr = fb.getDocument().getText(0, fb.getDocument().getLength()) + text;
try {
if (newStr.length() == 1 && newStr.equals("-")) {
valid = true;
} else if (Integer.valueOf(newStr) <= RANGE_MAX) {
valid = true;
}
} catch (NumberFormatException ex) {
}finally{
return valid;
}
}
}
}