Ho usato un'espressione regolare: il pattern \D* vuol dire: "cerca tutti i caratteri che non sono digits - ossia numeri". Il matcher lo crei sulla stringa che stai per inserire nel jtextfield, quindi se il matcher ha avuto un riscontro vuol dire che il jtextfield contiene almeno un carattere che non è numerico... e non viene inserito. Al pari, non succede niente se nel JTextField non viene inserito niente. Negli altri casi, ossia quando viene inserita una cifra, si chiama il metodo della superclasse per l'inserimento e tutto finisce lì.