Tá legal. fiquei muito curioso e fui ver como isso funciona 
Seguinte:
Use o JFormattedTextfield ao invés do JTextField, assim:
JFormattedTextField ftf = new JFormattedTextField();
Então vc vai precisar definir uma máscara.
MaskFormatter mf = new MaskFormatter("####-####");
Se quiser, pode definir quais caracteres são válidos ou quais são inválidos. Dê uma olhada na API!!!
mf.setValidCharacters("123");
Use um caracter para deixar mais explicito quantos caracteres devem ser preenchidos.
mf.setPlaceholderCharacter('_');
Para finalizar, link a máscara com o campo de texto.
Não se esqueça de capturar a exceção.
Aqui vai o código todo junto
JFormattedTextField ftf = new JFormattedTextField();
try {
MaskFormatter mf = new MaskFormatter("####-####");
mf.setValidCharacters("123");
mf.setPlaceholderCharacter('_');
mf.install(ftf);
}
catch (ParseException pe) {}
Pronto. bem simples né?!?! 
Aqui tem os caracteres que vc pode usar para criar a máscara.
No exemplo acima eu usei # que representa dígitos(números)
Any valid number, uses Character.isDigit.
’ Escape character, used to escape any of the special formatting characters.
U Any character (Character.isLetter). All lowercase letters are mapped to upper case.
L Any character (Character.isLetter). All upper case letters are mapped to lower case.
A Any character or number (Character.isLetter or Character.isDigit)
? Any character (Character.isLetter).
- Anything.
H Any hex character (0-9, a-f or A-F).
[]'s