Iniciando o preenchimento de um JTextField da Direita para a Esquerda

Olá Galera,

como faço para iniciar o preenchimento de um JTextField da Direita para a Esquerda e Completar os espaços vazios com zeros, sabendo que o JTextField em questão é um JFormattedTextField utilizando a máscara b[/b] para o cadastro do RG do cliente.

Obrigado a todos.

Olá wellington, Inicialmente a máscara está visível, mas se for o caso, posso alterar isso para ela aparecer penas quando o campo perder o foco. Mesmo assim ainda não tenho ideia de como fazer com que o campo seja preenchido a partir do lado direito e completar os espaços vazios (à esquerda) com zeros (suficientes) para completar o tamanho máximo que a máscara permite. Só utilizei a classe document uma vez para limitar a qde de caracteres de jTextArea. Vc não teria nehum exemplo “bobo” de como implementar isso que eu estou querendo agora? Agradeço!

É um trampinho fazer isso. Mas é possível usando a classe Document. Mas deve ser pensado o seguinte: A máscara ficará visível? A máscara irá aparecendo durante a digitação? Ou a máscara aparecerá apenas quando perder o foco, controlando apenas a quantidade máxima de caracteres (esta é a mais simples de fazer)?

Obs.: Você talvez se sinta escrevendo um editor de texto :wink:

Tente isto

JFormattedTextField field = new JFormattedTextField(); field.setHorizontalAlignment(JTextField.RIGHT);

1 curtida

Aliás, só mudando um pouco, ao invés de ir pelo Document, use o DefaultFormatterFactory

Você pode adicionar um Formatter para ele no modo de edição e outro no modo de visualização:

            DefaultFormatterFactory defaultFormatterFactory = field.getFormatterFactory();
            defaultFormatterFactory.setDisplayFormatter(displayFormatter);
            defaultFormatterFactory.setEditFormatter(editFormatter);

O displayFormatter e editFormatter podem ser feitos através de implementações de DefaultFormatter.
O DefaultFormatter oferece o método protegido getDocumentFilter que você pode sobrescrever. Ele retorna um DocumentFilter que você pode extender e criar sua própria implementação (de modo similar a um Document).

    protected DocumentFilter getDocumentFilter() {
        //seu codigo aqui.
        return implementedFilter;
    }

Eu acho esta implementação mais elegante e funcional além de adicionar mais funcionalidades a seu componente. Entretanto, é um pouco mais trabalhosa de fazer.

E por favor, evite fazer formatação utilizando perda e ganho de foco. Além de não ser funcional, dependendo do comportamento desejado, pode não funcionar corretamente ou ser visualmente estranho.