Ir ao conteúdo
  • Cadastre-se

Máscara não reconhecida?!


alllright

Posts recomendados

Oi, estou de volta com um pequeno problema..

Tenho um método (função) que, passando uma string, me formata uma máscara definidada por mim e que é a seguinte:

protected MaskFormatter createFormatterNUMEROS(String s)

{

MaskFormatter formatter = null;

try

{

formatter = new MaskFormatter(s);

formatter.setValidCharacters("0123456789");

} catch (java.text.ParseException exc)

{

System.err.println("formatter is bad: " + exc.getMessage());

System.exit(-1);

}

return formatter;

}

O que eu quero fazer é o seguinte:

Queria que, consoante o indicativo do telefone presente numa JFormattedTextField, os restantes números do telefone, presentes noutra JFormatted TextField, fossem formatados de acordo.

Dou um exemplo: (Em Portugal os números de telefone têm todos 9 dígitos obrigatórios --> 2 ou 3 dígitos de indicativo + restantes números)

EXEMPLO TELEFONE1:

Indicativo: 12

Restantes números: 3456789

EXEMPLO TELEFONE2:

Indicativo: 123

Restantes Números: 456789

Ou seja, já perceberam onde quero chegar... Se o indicativo (que eu leio da base de dados e é carregado para a tal JFormattedTextField) tiver 2 dígitos, então a máscara para os restantes dígitos a inserir terá que ter 7, senão terá que ter 6 (para os outros casos em que o indicativo tem 3 dígitos)

2 + 7 = 9 (nr digitos do indicativo) + (nr digitos a introduzir) = telefone

3 + 6 = 9 (nr digitos do indicativo) + (nr digitos a introduzir) = telefone

O que tentei fazer foi o seguinte, mas não tá funcionando... :(

String indicativo = rs.getString(3); // o rs é o resultset do select à BD

indicativo_telefone_utente.setValue(indicativo);

// Este código é que não me reconhece a tentativa de usar as máscaras.... não dá erro, simplesmente não tenho máscara na JFormattedTextField chamada telefone_utente, e o que eu pretendia era ter aí as máscaras funcionando....

if (indicativo.equalsIgnoreCase("21") || indicativo.equalsIgnoreCase("22"))

{

telefone_utente = new JFormattedTextField(createFormatterNUMEROS("#######")); //máscara com 7 dígitos

}

else

{

telefone_utente = new JFormattedTextField(createFormatterNUMEROS("######")); //máscara com 6 dígitos

}

Este código tá associado a um evento (ItemStateChanged) de uma JComboBox , pois é nesta combo que eu mudo os indicativos que são lidos da BD e que são colocados numa JFormattedTextField chamada

indicativo_telefone_utente

Os únicos casos em que os indicativos têm 2 dígitos são esses com "21" e "22"

Lisboa e Porto respectivamente,

todos as outras localidades têm 3 dígitos no indicativo...

Consigo ler da BD correctamente, consigo colocar os indicativos na JFormattedText também mas depois no if clause, não me reconhece nenhuma das máscaras. Não dá erro algum, simplesmente é como se a instrução

telefone_utente = new JFormattedTextField(createFormatterNUMEROS("######"));

não funcionásse!!!

Alguma ideia ou estou fazendo algo de errado??

Obrigado pela ajuda.

alllright

Portugal:confused:

Link para o comentário
Compartilhar em outros sites

Olá!

Vou te dar um exemplo que utilizo, que é parecido com o seu problema. Neste caso, tenho um JComboBox, no qual seleciono se é pessoa física ou jurídica. Se é pessoa física será fornecido cpf, se for pessoa jurídica será fornecido cnpj, de acordo com isso formato o campo de acordo com o tipo de pessoa. No início da aplicação eu crio as duas máscaras com o código a seguir:


[LEFT][B][COLOR=#7f0055][COLOR=#7f0055]try[/COLOR][/COLOR][/B] {
[COLOR=#0000c0][COLOR=#0000c0]mascaraCNPJ[/COLOR][/COLOR] = [B][COLOR=#7f0055][COLOR=#7f0055]new[/COLOR][/COLOR][/B] MaskFormatter( [COLOR=#2a00ff][COLOR=#2a00ff]"##.###.###/####-##"[/COLOR][/COLOR] );
[COLOR=#0000c0][COLOR=#0000c0]mascaraCPF[/COLOR][/COLOR] = [B][COLOR=#7f0055][COLOR=#7f0055]new[/COLOR][/COLOR][/B] MaskFormatter( [COLOR=#2a00ff][COLOR=#2a00ff]"###.###.###-##"[/COLOR][/COLOR] ); [/LEFT]


}

[LEFT][B][COLOR=#7f0055][COLOR=#7f0055]catch[/COLOR][/COLOR][/B] ( ParseException exc ) {
} [/LEFT]


No JComboBox, adiciono um Listener que verifica o estado do Combo. Sempre que o usuário alterar o valor dele, ou a aplicação escrever o tipo de pessoa, altera a formatação do campo:



[COLOR=#0000c0][COLOR=#0000c0]divisao[/COLOR][/COLOR].addItemListener([B][COLOR=#7f0055][COLOR=#7f0055]new[/COLOR][/COLOR][/B] java.awt.event.ItemListener() {

[LEFT][B][COLOR=#7f0055][COLOR=#7f0055]public[/COLOR][/COLOR][/B][B][COLOR=#7f0055][COLOR=#7f0055]void[/COLOR][/COLOR][/B] itemStateChanged(java.awt.event.ItemEvent e) {
[COLOR=#0000c0][COLOR=#0000c0]cnpj_cpf[/COLOR][/COLOR].setValue([B][COLOR=#7f0055][COLOR=#7f0055]null[/COLOR][/COLOR][/B]);[/LEFT]


[B][COLOR=#7f0055][COLOR=#7f0055] if[/COLOR][/COLOR][/B] ([COLOR=#0000c0][COLOR=#0000c0]divisao[/COLOR][/COLOR].getSelectedIndex() == 0)

[LEFT][COLOR=#0000c0][COLOR=#0000c0] cnpj_cpf[/COLOR][/COLOR].setFormatterFactory([B][COLOR=#7f0055][COLOR=#7f0055]new[/COLOR][/COLOR][/B] DefaultFormatterFactory([COLOR=#0000c0][COLOR=#0000c0]mascaraCPF[/COLOR][/COLOR]));
[B][COLOR=#7f0055][COLOR=#7f0055]else[/COLOR][/COLOR][/B]
[COLOR=#0000c0][COLOR=#0000c0] cnpj_cpf[/COLOR][/COLOR].setFormatterFactory([B][COLOR=#7f0055][COLOR=#7f0055]new[/COLOR][/COLOR][/B] DefaultFormatterFactory([COLOR=#0000c0][COLOR=#0000c0]mascaraCNPJ[/COLOR][/COLOR])); [/LEFT]



}

[LEFT]});[/LEFT]


neste caso "divisao" é o nome do jComboBox que recebeu o listener. Quando seu estado mudar automaticamente altera a formatação do campo "cnpj_cpf" fazendo-o receber a máscara do cpf ou cnpj, dependendo do que estiver selecionado, como coloquei na posição 0 do jComboBox o cpf, coloquei no código a expressão if, colocando a máscara do cpf quando a posição 0 do comboBox estiver selecionado e cnpj quando a outra posição estiver selecionada.

Você pode adaptar essa solução ao seu problema. efetuando a contagem de caracteres do item selecionado no jComboBox e mandando formatar o outro campo de acordo com o número de caracteres...

Depois posta ai se resolver o problema.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!