@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