Putz, eu tinha um componente assim…
Se vc pode usar Java 1.4, vc pode usar o JFormattedTextField e fornecer pra ele uma máscara e um “filler”, algo pra preencher o vazio.
Mas agora tá me vindo a idéia de usar um Document específico. Faz uma busca aqui no GUJ por FixedLenghtDocument, tem um post bem legal com código pronto.
Vc pode ter um vetor de “posições”, por exemplo, no caso do CPF:
[CPF removido], são 11 dígitos. Vc cria um vetor assim:
int validPositions[] = {0, 1, 2, 4, 5, 6, 8, 9, 10, 12, 13};
na hora de inserir um caractere, em vez de inserir na posição i, vc insere na posição [i]validPositions. Inicializa o conteúdo do seu document com “___.___._-” e dá um jeito de quando um caractere for removido, vc colocar _ de novo.
Não é difícil de fazer (é mais difícil explicar), e vc pode criar de um jeito tal que vc possa reutilizar o componente pra CNPJ, por exemplo.
Daí, se não me engano, vc pode usar até um JTextField normal…
boa sorte!!