Ho implementato una classe per costruire un JTextField che può visualizare un numero masimo di caratteri specificato nel costruttore:
MaxLengthField field = new MaxLengthField(10, 5);
dove il primo parametro rappresenta il numero massimo di caratteri che posssono essere inseriti nel campo, mentre il secondo rappresenta il numero di colonne, come nel normale costruttore di JTextField.
PS: questa è la versione per swing! Non so se si puo facilmente adattare per awt,
codice:
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
/*..........................................................*/
/*...MaxLengthField realizza un JTextField che permette di .*/
/*...inserire un numero di caratteri limitato e specificato */
/*...attraverso il costruttore..............................*/
/*..........................................................*/
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;
}
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);
}
}
}