Grazie mille per la velocissima risposta ma purteoppo non mi funziona, continua a farmi digitare sempre un solo carattere. Ti riposrto più nel dettaglio cosa ho fatto:

Classe dove si trova la mia GUI con la JTextField:

codice:
textField_4 = new JTextField();
			textField_4.addKeyListener(new KeyAdapter() {
				@Override
				public void keyPressed(KeyEvent arg0) {
					
					NumberDocument digitsOnlyDoc1 = new NumberDocument();
					textField_4.setDocument(digitsOnlyDoc1);
				}
			});
Nella classe NumberDocument ho copiato una porzione del tuo codice che riporto:

codice:
public class NumberDocument extends PlainDocument {
	
    public void insertString(int offs, String str, AttributeSet a)
    throws BadLocationException {
        if (str == null)
            return;

        StringBuffer sb = new StringBuffer(str.length());
System.out.println(str.length());
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            // Inserts the character into the buffer
            // ONLY if it is a digit.
            if (Character.isDigit(c)) {
                sb.append(c);
            }
        }

        super.insertString(offs, sb.toString(), a);
    }

}
ho aggiunto un stampa della lunghezza che mi ritorna sempre 1.
attendo suggerimenti
saluti
nh