Duvida com o enum

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 …