Quantcast
Channel: Programação - GUJ
Viewing all articles
Browse latest Browse all 33093

Classe Pronta - Mascara do JFormattedTextField para Telefones

$
0
0

@4mega escreveu:

Desenvolvi uma método que permite que o sistema identifique qual tipo de mascara para o telefone será utilizado, ele serve para telefones de:

  • 8 caracteres( 0000-0000 ); Sem DDD
  • 9 caracteres( 00000-0000 ); Sem DDD para novos telefones
  • 10 caracteres( (00)0000-0000 ); Com DDD
  • 11 caracteres( (00)00000-0000 ) ou ( 0800 000-0000 ); Com DDD para novos telefones ou 0800, ele gera um Pop-up para selecionar o tipo desejado;

Como eu possuo varios JFormattedTextField que usaram este método, eu coloco como valor de entrada no método o nome do campo alterado.

private void mudaMascaraTelefone(JFormattedTextField format) {
        try {
            format.setValue(null);
            String nome = format.getText().replaceAll("[^0-9]", "");
            final MaskFormatter mask = new MaskFormatter();
            switch (nome.length()) {
                case 8:
                    mask.setMask("####-####");
                    format.setFormatterFactory(new DefaultFormatterFactory(mask));
                    break;
                case 9:
                    mask.setMask("#####-####");
                    format.setFormatterFactory(new DefaultFormatterFactory(mask));
                    break;
                case 10:
                    mask.setMask("(##)####-####");
                    format.setFormatterFactory(new DefaultFormatterFactory(mask));
                    break;
                case 11:
                    JPopupMenu pop = new JPopupMenu();
                    JMenuItem comDDD = new JMenuItem("(" + nome.substring(0, 2) + ")" + nome.substring(2, 7) + "-" + nome.substring(7, 11));
                    comDDD.addActionListener((ActionEvent ae) -> {
                        try {
                            mask.setMask("(##)#####-####");
                            format.setFormatterFactory(new DefaultFormatterFactory(mask));
                            format.setText(nome);
                        } catch (ParseException ex) {
                        }
                    });
                    JMenuItem com0800 = new JMenuItem(nome.substring(0, 4) + " " + nome.substring(4, 7) + "-" + nome.substring(7, 11));
                    com0800.addActionListener((ActionEvent ae) -> {
                        try {
                            mask.setMask("#### ###-####");
                            format.setFormatterFactory(new DefaultFormatterFactory(mask));
                            format.setText(nome);
                        } catch (ParseException ex) {
                        }
                    });
                    pop.add(comDDD);
                    pop.add(com0800);
                    pop.show(format, format.getX(), format.getY());
                    break;
                default:
                    break;
            }
            format.setText(nome);
        } catch (Exception asd) {
            System.out.println(asd);
        }
    }

O código abaixo mostra a chamada do método, que ocorre ao sair do foco:

private void jFormattedTextField1FocusLost(java.awt.event.FocusEvent evt) {                                               
        mudaMascaraTelefone(jFormattedTextField1);
 }

Este código abaixo limpa a mascara quando entra em foco, desta forma ele reseta a mascara mas mantem o antigo numero

private void jFormattedTextField7FocusGained(java.awt.event.FocusEvent evt) {                                                 
        jFormattedTextField7.setFormatterFactory(null);
}

Importante citar que caso n entre em nenhuma condição, ele gravara normalmente o numero digitado, portando que seja apenas numérico (Importante caso o numero seja do Exterior).

Espero que este código tenha ajudado alguém. Duvidas, comentários e/ou sugestões são bem vindos.

Mensagens: 1

Participantes: 1

Ler tópico completo


Viewing all articles
Browse latest Browse all 33093