MaxLengthField(n) ti costruisce un campo di testo che non accetta piu di n caratteri, con MaxLengthField(n, k) stabilisci anche il numero di colonne che il campo deve avere (k). Ampliando i controlli eseguiti in MaxLengthDocument.insertString puoi controllare che la stringa risultatnte dall'inserimento sia un numero, e solo in questo caso invocare super.insertString(offs, str, a) altrimenti fai un return e l'inserimento non sarà accettato.
codice:
class MaxLengthField extends JTextField {
private int maxLength;
//Il primo parametro del costruttore rappresenta il numero
//massimo di caratteri
public MaxLengthField(int maxLength, int cols) {
super(cols);
this.maxLength = maxLength;
}
public MaxLengthField(int maxLength) {
this(maxLength, maxLength);
}
protected Document createDefaultModel() {
return new MaxLengthDocument();
}
//Metodo per cambiare dinamicamente il numero massimo di caratteri
//che il campo può contenere
public void setMaxLenght(int maxLength){
this.maxLength = maxLength;
}
//Restituisce il numero massimo di caratteri che il campo può
//contenere
public int getMaxLenght(){
return maxLength;
}
//Il Document che gestisce l'inserimento del testo
class MaxLengthDocument extends PlainDocument {
//La stringa da inserire se è troppo lunga viene troncata
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
if (str == null)
return;
if(getLength() == maxLength)
return;
if(str.length() + getLength() > maxLength)
str = str.substring(0, maxLength - getLength());
super.insertString(offs, str, a);
}
}
}