devi ridefinire il Document associato al tuo JTextField creandone uno tuo personalizzato. Ad esempio ti crei una classe LimitDocument che estende PlainDocument. Ridefinisci il metodo insertString(int offset, String s, AttributeSet a) il quale viene richiamato automaticamente ogni qualvolta si inserisce qualcosa nel JTextField associato. questo metodo riceve 3 parametri:

offset - la lunghezza attuale del contenuto del JTextField
s - la stringa che si sta tentando di inserire
a - gli attributi per il contenuto inserito

Ciò che a te serve sono soltanto i primi due. Fai il controllo se offset+s.length() non superi il limite che vuoi, se non lo supera richiami il metodo insertString(offset,s,a) della classe madre (PlainDocument).

Una volta definito il Document ti basta associarlo al tuo JTextField con tuoJTextField.setDocument(tuoLimitDocument)