ola pessoal, estou tentando usar o enum mas estou com problemas …
tenho uma classe onde eu monto todas as mascaras que vou usar no meu sistema …
import java.text.ParseException;
import javax.swing.text.MaskFormatter;
public class Mascara {
public Mascara() {
}
public enum TipoMascara{CGC,CPF,TEL,CEP} ;
public MaskFormatter mascar ;
public MaskFormatter getMascara(TipoMascara tipo) throws ParseException {
switch (tipo) {
case CPF:
mascar = new MaskFormatter("###.###.###-##");
case CEP:
mascar = new MaskFormatter("##.###-###");
case TEL:
mascar = new MaskFormatter("(##)####-####");
case CGC:
mascar = new MaskFormatter("##.###.###/####-##");
}
return mascar;
}
}
dae no meu cadastro, eu chamo essa classe de mascara usando jformatedtextfield da seguinte maneira …
jFormattedTextField1 = new JFormattedTextField( Mascara.TipoMascara.CGC );
mas ao inves de me retornar a mascara de cgc - ("##.###.###/####-##"); - retorna a palavra “CGC” …
o que esta de errado no meu codigo que nao quer aparecer a mascara …
obrigado
Está certo acontecer isso mesmo, vc está chamando o construtor do componente JFormattedTextField o Enum que vc criou, ele não vai conseguir adivinhar para você qual mascara você quer usar a partir do enum, você precisa chamar o metodo getMascara() que você criou, porque lá vc retorna a mascara de acordo com cada enum ficando assim:
Mascara m = new Mascara();
new JFormattedTextField(m.getMascara(Mascara.TipoMascara.CEP));
Blz…
Acho que é isso…
O mais elegante seria você declarar as máscaras dentro do seu enum:
[code]
import java.text.ParseException;
import javax.swing.text.MaskFormatter;
public enum Mascara
{
CGC("##.###.###/####-##"),
CPF("###.###.###-##"),
TEL("(##)####-####"),
CEP("##.###-###");
private String mask;
private Mascara(String mask) {
this.mask = mask;
}
public MaskFormatter getMascara() throws ParseException {
return new MaskFormatter(mask);
}
}[/code]
E na hora de usar, só fazer:
deu certo …
muito obrigado pessoal
ViniGodoy, taí um excelente uso para Enum!!!
Acabei de refatorar umas 10 classes de máscaras aqui de bobeira… :lol:
Gostou?
Então aproveite e dê uma olhada também neste tópico.
ola …
surgiu mais um problema com o enum …
ai vai meu codigo …
public enum letras{NONE, UPPER, LOWER} ;
static letras formata ;
switch (formata) {
case NONE:
str = str ; //str.trim() ;
case UPPER:
str = str.toUpperCase();
case LOWER:
str = str.toLowerCase();
}
System.out.println("fim " + str);
jTextField1.setDocument( new Validacao( Validacao.letras.UPPER ) );
explicando, o que quero fazer no textfield1 passo o parametro que quero, nesse caso, “UPPER”, pra que o que seja digitado fique maiusculo (vejo isso no switch) - mas ele esta passando pelos 3 casos - NONE, UPPER, LOWER - ou seja, sempre vai retornar como lower, por ser o ultimo …
o que eu faco, tentei trocar o switch por if e tambem nao deu certo …
Faltou break no seu switch.
switch (formata) {
case NONE:
str = str ; //str.trim() ;
break;
case UPPER:
str = str.toUpperCase();
break;
case LOWER:
str = str.toLowerCase();
break;
}
Mas, novamente, você está subaproveitando o enum.
Via de regra, fuja do switch!!! Quando possível, use o polimorfismo. Dá uma olhada no link que eu passei ali em cima e vê se consegue refatorar esse seu código.
Então, com o código refatorado ficaria assim:
Primeiro, e num letras usando polimorfismo:
[code]public enum Letras {
NONE {
@Override public String formata(String texto) {
return texto;
}
},
UPPER {
@Override public String formata(String texto) {
return texto.toUpperCase();
}
},
LOWER {
@Override public String formata(String texto) {
return texto.toLowerCase();
}
};
public abstract String formata(String texto);
}[/code]
Depois, o local de uso:
static letras formata;
str = formata.formata(str);
jTextField1.setDocument(new Validacao(Validacao.letras.UPPER));
Dá uma olhada no link lá em cima para mais explicações.
estou com um problema para definir o tamanho de caracteres digitados num textfield…
usei o seguinte :
if( this.getLength() == total ) {
return;
}
onde “total” eu passo via parametro …
mas tem um problema, defini “total” como 5, se eu digitar “1234” , copiar “123”, e colar, ele deixar colar, nao veta os 5 de tamanho maximo, o que posso fazer pra corrigir isso ??
Você tem que usar a interface document, como descrito neste tutorial e implementado neste tópico.
mais um problema …
tenho varios textfield …
jTextField1.setDocument( new Validacao(10, Validacao.letras.NONE ) );
jTextField2.setDocument( new Validacao(20, Validacao.letras.UPPER ) );
jTextField3.setDocument( new Validacao(30, Validacao.letras.LOWER ) );
o “10”,“20”,“30” eh o tamanho maximo de caracteres, o “NONE” pra formatar o campo … mas ele esta aceitando apenas o ultimo, ou seja, todos os textfield …
Tem cheiro de que algum atributo dentro da sua classe Validacao é estático. Se for, faça-o deixar de ser.
Se não for isso, anexa o código da classe num post aí pra gente dar uma olhada…
sobre a ultima duvida deu certo …
estavam mesmo como static, mudei para public e cada textfield ficou com sua devida validacao …
obrigado novamente
ola
a mascara deu certo, esta funcionando …
mas ela fica aparecendo assim : " . - " no caso do cep …
tem como mudar os espacos em branco por "" ??
procurei algo sobre " .setPlaceholderCharacter(’’); " mas nao sei como implementar isso no meu codigo …