Problema com JFormattedTextField e MaskFormatte  XML
Índice dos Fóruns » Interface Gráfica
Autor Mensagem
EderBaum
JavaBaby
[Avatar]

Membro desde: 27/07/2005 22:58:32
Mensagens: 92
Offline

tenho o seguinte código:

MaskFormatter mf = new MaskFormatter("UUUUU"); /*Permite digitar até 5 letras maiusculas*/
JFormattedTextField field = new JFormattedTextField(mf);


No caso a mascara permite digitar no máximo 5 letras em upercase.
Se eu der um tab e ir para o próximo campo e tiver digitado no "field1" algo como "EU" que tem apenas 2 letras, o campo fica vazio.

Meu objetivo é criar algo em que o cara possa digitar no máximo X letras e o que vier abaixo ele aceite mesmo assim.
Outra coisa é o comportamento estranho do JFormattedTextField em que com o mouse ou seta para direita eu posso ir digamos a posição 4 do campo sem digitar nada. queria evitar isso.

Alguém pode me ajudar?

sabesim.com.br
[WWW]
EderBaum
JavaBaby
[Avatar]

Membro desde: 27/07/2005 22:58:32
Mensagens: 92
Offline

O problema do TAB resolvi com isso:

field.setFocusLostBehavior(JFormattedTextField.PERSIST);

Só falta agora o comportamento estranho do JFormattedTextField em que com o mouse ou seta para direita eu posso ir digamos a posição 4 do campo sem digitar nada

Alguém ai?

sabesim.com.br
[WWW]
Rodrigo Manhães
JavaGuru
[Avatar]

Membro desde: 14/07/2005 17:07:07
Mensagens: 242
Localização: Campos dos Goytacazes/RJ
Offline

O uso de JFormattedTextField se justifica quando você realmente tem uma máscara para edição (por exemplo: datas, CEP ou CPF), o que realmente não é o seu caso.

Para o que você deseja, aconselho o uso de JTextField comum auxiliado por um InputVerifier. Por exemplo, para que o componente aceite no máximo 5 letras em caixa-alta, o código é extremamente simples:

Para ligar o verifier ao componente, faça

Um verifier serve para validar o conteúdo de um widget (retornando false caso a entrada seja inválida), mas pode-se através dele transformar o valor de um componente, como é feito aqui, truncando o conteúdo caso tenha mais de 5 caracteres e convertendo-o para maiúsculas. Note que a validação é feita quando da perda do foco, ou seja, o componente aceitará minúsculas e mais que cinco caracteres. Na perda do foco é que a conversão será executada.

PS: Não estou com o JSE neste computador, de modo que o código pode conter alguma eventual "irregularidade", mas a idéia é esta.

https://github.com/rodrigomanhaes
http://programacaoradical.blogspot.com
EderBaum
JavaBaby
[Avatar]

Membro desde: 27/07/2005 22:58:32
Mensagens: 92
Offline

Note que a validação é feita quando da perda do foco, ou seja, o componente aceitará minúsculas e mais que cinco caracteres. Na perda do foco é que a conversão será executada.


Este é o problema, eu queria algo mais "instantãneo"

sabesim.com.br
[WWW]
Rodrigo Manhães
JavaGuru
[Avatar]

Membro desde: 14/07/2005 17:07:07
Mensagens: 242
Localização: Campos dos Goytacazes/RJ
Offline

Mas que diferença faz?

https://github.com/rodrigomanhaes
http://programacaoradical.blogspot.com
EderBaum
JavaBaby
[Avatar]

Membro desde: 27/07/2005 22:58:32
Mensagens: 92
Offline

A diferença é que:

Imagine que eu tenho um campo que vai código de barras.

- Um código de barras é numérico e tem 13 digitos
- Ai a anta do usuário digita uma palavra ou letras, ou coisa inválida que dê um certo trabalho
- Ele só vai descobrir que errou a coisarada toda depois que dêr TAB.

Deve existir algo, pois em linguagens como Dataflex(Super arcaico) tem isso

sabesim.com.br
[WWW]
EderBaum
JavaBaby
[Avatar]

Membro desde: 27/07/2005 22:58:32
Mensagens: 92
Offline

Parece que DocumentFilter resolve meu problema.

vou dar uma estudad

sabesim.com.br
[WWW]
EderBaum
JavaBaby
[Avatar]

Membro desde: 27/07/2005 22:58:32
Mensagens: 92
Offline

FUNCOU!!!

Ufffa, é por isso que a persistência vale a pena;

Veja o result ai



Relativamente complexo, mas Perfeito

sabesim.com.br
[WWW]
Rodrigo Manhães
JavaGuru
[Avatar]

Membro desde: 14/07/2005 17:07:07
Mensagens: 242
Localização: Campos dos Goytacazes/RJ
Offline

Não conhecia o DocumentFilter, valeu a dica! Desenvolvemos um mini-framework Swing para uso interno, vou substituir os InputVerifier por DocumentFilter sempre que a função do primeiro for simplesmente filtrar e não validar. Muito bom mesmo!

https://github.com/rodrigomanhaes
http://programacaoradical.blogspot.com
 
Índice dos Fóruns » Interface Gráfica
Ir para:   
Powered by JForum 2.1.8 © JForum Team