Estou desenvolvendo uma aplicação com SWING e tenho tido dificuldades em oferecer um campo para entrada de valores pré-formatados ( datas, cep, valores monetários etc … ) . Estou tentando usar JFormattedTextField , mas tenho achado bastante trabalhoso.
Alguém tem alguma dica que possa me ajudar ??? Vale apena tentar em SWT ???
public static MaskFormatter formatoMascaraCampo(int intTpMascara) {
// Declaraçao e Inicializaçao de Variáveis
MaskFormatter formato = new MaskFormatter();
try{
switch (intTpMascara){
case 1:
//Formato data
formato.setMask("##/##/####");
formato.setPlaceholderCharacter('_');
break;
case 2:
//Formato da data mostrada ao usuário
//Tem um local onde o usuário me diz qual é o formato
//de data que ele quer visualizar no sistema.
formato.setMask("UU/UU/UUUU");
formato.setPlaceholderCharacter('_');
formato.setValidCharacters("DMY");
break;
case 3:
//Formato de hora
formato.setMask("##:##:##");
formato.setPlaceholderCharacter('_');
break;
}
}
catch (Exception ex) {
ex.printStackTrace();
}
return formato;
}
e na hora de criar o campo dentro do JFrame eu só faço chamar a função:
Olá galera… :!: :!:
aproveitando o post…
é já pesquisei um monte sobre formatação de TextField aqui mas acredito que não encontrei o que realmente preciso…
formatar cep, cpf, data tá tudo beleza…
mas se eu quero formatar o campo para incluir zeros à esquerda, como faço? :?: :?:
por exemplo, ao digitar 118 ou 15 quero que o campo fique com o formato 0118 ou 0015, por exemplo…
[quote=“Hwoarang”]Olá galera… :!: :!:
aproveitando o post…
é já pesquisei um monte sobre formatação de TextField aqui mas acredito que não encontrei o que realmente preciso…
formatar cep, cpf, data tá tudo beleza…
mas se eu quero formatar o campo para incluir zeros à esquerda, como faço? :?: :?:
por exemplo, ao digitar 118 ou 15 quero que o campo fique com o formato 0118 ou 0015, por exemplo…
pensei que houvesse um método que poderia fazer isso, mas como não achei, fiz eu mesmo um do while aqui, concatenando os zeros a esquerda do número…
só que ganhei outro problema…
como estava querendo limitar a quantidade de numeros digitados pelo usuário, criei a máscara “####” e tudo ficou beleza…
só que agora o ActionPerformed do campo não é executado quando digito apenas 2 números e dou ENTER…
sem a máscara o ActionPerformed é chamado e eu consigo colocar os zeros à esquerda, mas usando Mask não consigo…
[quote=“TedLoprao”]Sorry, o q eu quis dizer foi usar um DecimalFormat ao invés de um MaskFormatter… Confundi as classes…
Testa ai que funciona!!!
Fallow[/quote]
ahh sim… com DecimalFormat eu resolvo… mas… ganhei outro problema:
o campo só aceita o formato “0000” se eu pressionar TAB… não com ENTER
estou apanhando aqui pq não consigo entender pq quando eu uso máscaras (seja com MaskFormatter ou DecimalFormat) não consigo validar o campo com ENTER (o código do ActionPerformed do campo não dispara…)
Também estou com problemas de validação / formatação no SWING. O fato é que sou desenvolvedor WEB e somente agora estou usando GUI.
Sei que na WEB (JSP) temos um frame work de validação muito bom (o Struts-Validator) e se não existir algo assim no GUI estou pensando em desenvolver.
Minha ideia é extender a classe JtextField para criar uma propriedade mask (getMask, setMask), assim vou poder usa-la direto na ferramenta de editar formulários do NetBeans.
Também estou com problemas de validação / formatação no SWING. O fato é que sou desenvolvedor WEB e somente agora estou usando GUI.
Sei que na WEB (JSP) temos um frame work de validação muito bom (o Struts-Validator) e se não existir algo assim no GUI estou pensando em desenvolver.
Minha ideia é extender a classe JtextField para criar uma propriedade mask (getMask, setMask), assim vou poder usa-la direto na ferramenta de editar formulários do NetBeans.
Oque voces acham ???[/quote]
Nunca usei esse Struts-Validator, mas em swing existe JFormattedTextField. Mas mesmo assim talvez seja uma boa idéia porque como pode ver nesse topico mesmo ele deixa muito a desejar…
Uma última pergunta: Onde posso publicar os resultados obtidos para que a galera do GUJ tome conhecimento? Sabe, isso ajudaria as pessoas que tem os mesmos problemas que eu, e por outro lado, também evita que eu re-invente a roda !!!
Estou iniciando os trabalhos e pretendo seguir os seguintes tópicos:
1 - Separar filtro de entrada, validação na perda do foco e validação na conclusão.
1.1 Filtro de Entrada - Devemos filtrar os caracters válidos de acordo com a posição dentro do campo. Se for necessário construir uma validação para um número inteiro o “-” só é um caracter válido na primeira posição, nas demais temos “0-9” e o “.” ou a “,” dependendo da nacionalização.
1.2 Validação Na Perda do Foco - Voltando ao exemplo do inteiro, o “-” ná primeira posição é uma entrada válida, mas só o “-” não é necessáriamente um número inteiro válido. Assimm quando o campo perder o foco uma nova validação deve ser realizada.
1.3 Validação Na Conclusão - Como o usuário tem o “poder do mouse” ele pode preencher campos em ordem invertida, dessaforma regras de validação que envolvam dois ou mais camos, devem ser checadas após o preenchimento de todo o formulário.
2 - Permitir aseparação entre oformato de armazenagem e o formato de exibição.
3 - Dar flexibilidade ao projeto para que novas regras de validação sejam inseridas facilmente.
4 - Permitir que as ferramentas de validação sejam acessíveis de uma RAD (perdão a galera do eclipse mas eu tenho uzado NetBeans com grande sucesso na montagem de formulários Swing).
acho que caso precise da ajuda de pessoas do GUJ ou de fora, hospede seu projeto num sourceforce ou java.net ou portais desse tipo. Como o codigo fonte da API do java é aberto… olhe como jformattedtextfield e MaskFormatter funcionam… como vc mesmo disse… não vá inventar a roda. E outra… qd estiver pronto acho que é só fazer um pequeno artigo ensinando como funciona… e conversa com algum moderador aqui do GUJ que com certeza eles teram de prazer de postar o artigo.
Ah e faça tudo muito bem documentado.
Precisando de ajuda estou aqui tbm… =))
qq coisa mande PM… o ruim que estou sem internet em casa por enguanto… ae qd mexo na net é aqui no serviço e geralmente não posso ficar mexendo muito na internet auqi do serviço.
criei uma classe que extende plain document… tá funcionando normal… mas, qual o metodo da plaindocument que serve para eu adicionar um item a uma combo box?