Utilizzo il seguente codice per impedire l'inserimento, in un componente swing (jtextfield), di caratteri che non siano numeri.
codice:
public class LimitNumberDocument extends PlainDocument{
private static final long serialVersionUID = -6829435640064907333L;
private int max_length = 0;
public LimitNumberDocument(int max_length) {
this.max_length = max_length;
}
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException{
try{
//se aggiungo numeri negativi ritorno
//if(Integer.parseInt(str) < 0) {
if(Long.parseLong(str) < 0) {
System.err.println("numero negativo non ammesso");
return;
}
}
catch(NumberFormatException e){
//se non è un numero ritorno
System.err.println("NumberFormatException");
return;
}
int chNumberInsert = getText(0, offs).length();
int chNumberToInsert = str.length();
int chNumberMax = chNumberInsert + chNumberToInsert;
if (chNumberMax <= max_length)
super.insertString(offs, str, a);
else
System.out.println("numero di lunghezza superiore a quella permessa per il campo");
}
}
Purtroppo se inserirsco un numero troppo lungo, ad esempio: 666666666666666666666
il codice riportato mi eccede nel punto Long.parseLong, ed il numero non viene accettato
Come faccio ad evitare questo problema?