Formatar campo para telefone

Java

22/06/2011

Colegas, boa noite !!!..

estou criando um form para cadastro e gostaria de saber como eu faço para formatar o campo destinado ao número do telefone, para que ele seja exibido inicial no seguinte formato:

( ) -

ou seja, o campo já exibiria o espaço destinado para o DDD, e assim que o usuário digitasse o telefone as informação ficaria:

(12) 9999-9999

Alguém saberia me dizer como ? Já li varias materias, mas não esta dando certo.
Nilo Souza

Nilo Souza

Curtidas 0

Respostas

Nilo Souza

Nilo Souza

22/06/2011

Colegas, boa noite !!!..

estou criando um form para cadastro e gostaria de saber como eu faço para formatar o campo destinado ao número do telefone, para que ele seja exibido inicial no seguinte formato:

( ) -

ou seja, o campo já exibiria o espaço destinado para o DDD, e assim que o usuário digitasse o telefone as informação ficaria:

(12) 9999-9999

Alguém saberia me dizer como ? Já li varias materias, mas não esta dando certo.

Tentei fazer assim:

1 - Declarei uma variável

 MaskFormatter formatoFone;


2- No Custom Creation Code coloquei
new JFormattedTextField(formatoFone);


3- No pre-creation code coloquei:
try {
    formatoFone = new MaskFormatter("(##)####-####");   
}
catch(Exception erro)
{JOptionPane.showMessageDialog(null,"Não foi possivel setar a mascara para telefone, "+erro); }



Quando testei deu  erro:
22/06/2011 20:37:20 treinamento.dao.FornecedorDao addFornecedor
GRAVE: null
java.sql.DataTruncation: Data truncation
    at org.firebirdsql.jdbc.field.FBWorkaroundStringField.setString(FBWorkaroundStringField.java:97)
    at org.firebirdsql.jdbc.field.FBField.setObject(FBField.java:752)
    at org.firebirdsql.jdbc.AbstractCallableStatement.internalExecute(AbstractCallableStatement.java:429)
    at org.firebirdsql.jdbc.AbstractCallableStatement.executeUpdate(AbstractCallableStatement.java:341)
    at treinamento.dao.GenericaDao.executePrepered(GenericaDao.java:72)
    at treinamento.dao.FornecedorDao.addFornecedor(FornecedorDao.java:32)
    at treinamento.forms.frmFornecedor.btnConfirmarActionPerformed(frmFornecedor.java:505)
    at treinamento.forms.frmFornecedor.access$400(frmFornecedor.java:32)
    at treinamento.forms.frmFornecedor$6.actionPerformed(frmFornecedor.java:347)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
    at java.awt.Component.processMouseEvent(Component.java:6289)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
    at java.awt.Component.processEvent(Component.java:6054)
    at java.awt.Container.processEvent(Container.java:2041)
    at java.awt.Component.dispatchEventImpl(Component.java:4652)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Component.dispatchEvent(Component.java:4482)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
    at java.awt.Container.dispatchEventImpl(Container.java:2085)
    at java.awt.Window.dispatchEventImpl(Window.java:2478)
    at java.awt.Component.dispatchEvent(Component.java:4482)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)
    at java.awt.EventQueue.access$000(EventQueue.java:85)
    at java.awt.EventQueue$1.run(EventQueue.java:603)
    at java.awt.EventQueue$1.run(EventQueue.java:601)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
    at java.awt.EventQueue$2.run(EventQueue.java:617)
    at java.awt.EventQueue$2.run(EventQueue.java:615)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)
    at java.awt.Dialog$1.run(Dialog.java:1046)
    at java.awt.Dialog$3.run(Dialog.java:1098)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.Dialog.show(Dialog.java:1096)
    at java.awt.Component.show(Component.java:1585)
    at java.awt.Component.setVisible(Component.java:1537)
    at java.awt.Window.setVisible(Window.java:842)
    at java.awt.Dialog.setVisible(Dialog.java:986)
    at treinamento.forms.frmPrincipal.jmiFornecedorActionPerformed(frmPrincipal.java:177)
    at treinamento.forms.frmPrincipal.access$100(frmPrincipal.java:17)
    at treinamento.forms.frmPrincipal$2.actionPerformed(frmPrincipal.java:100)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:809)
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:850)
    at java.awt.Component.processMouseEvent(Component.java:6289)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
    at java.awt.Component.processEvent(Component.java:6054)
    at java.awt.Container.processEvent(Container.java:2041)
    at java.awt.Component.dispatchEventImpl(Component.java:4652)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Component.dispatchEvent(Component.java:4482)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
    at java.awt.Container.dispatchEventImpl(Container.java:2085)
    at java.awt.Window.dispatchEventImpl(Window.java:2478)
    at java.awt.Component.dispatchEvent(Component.java:4482)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)
    at java.awt.EventQueue.access$000(EventQueue.java:85)
    at java.awt.EventQueue$1.run(EventQueue.java:603)
    at java.awt.EventQueue$1.run(EventQueue.java:601)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
    at java.awt.EventQueue$2.run(EventQueue.java:617)
    at java.awt.EventQueue$2.run(EventQueue.java:615)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)


Pode me ajudar por favor, estou a dois dias tentando em foruns e lendo postes e não consegui resolver.
Obrigado!
GOSTEI 0
Davi Costa

Davi Costa

22/06/2011

O primeiro e o segundo link são excelentes:

http://www.facom.ufu.br/~fabiano/Programacao%20Orientada%20a%20Objetos%20I/Aula%20GUI%20em%20Java%20III.pdf

http://javafree.uol.com.br/artigo/863862/JFormattedTextField.html

http://javafree.uol.com.br/topic-868445-Campo-telefone-MaskFormatter-dando-erro.html
GOSTEI 0
Davi Costa

Davi Costa

22/06/2011

Bom não sei se realmente seu problema é a máscara ou o banco pelo erro parece ser problema de banco ao salvar. É isso mesmo?

22/06/2011 20:37:20 treinamento.dao.FornecedorDao addFornecedor
GRAVE: null
java.sql.DataTruncation: Data truncation
    at org.firebirdsql.jdbc.field.FBWorkaroundStringField.setString(FBWorkaroundStringField.java:97)
    at org.firebirdsql.jdbc.field.FBField.setObject(FBField.java:752)
    at org.firebirdsql.jdbc.AbstractCallableStatement.internalExecute(AbstractCallableStatement.java:429)
    at org.firebirdsql.jdbc.AbstractCallableStatement.executeUpdate(AbstractCallableStatement.java:341)
    at treinamento.dao.GenericaDao.executePrepered(GenericaDao.java:72)
    at treinamento.dao.FornecedorDao.addFornecedor(FornecedorDao.java:32)

Att Davi
GOSTEI 0
Nilo Souza

Nilo Souza

22/06/2011

Realmente não esta salvando no banco.
Se eu colocar assim:
formatoFone = new MaskFormatter("(##)####-####"); 

da erro.
Mas se colocar assim:
formatoFone = new MaskFormatter("####-####"); 

ele salva.



GOSTEI 0
Davi Costa

Davi Costa

22/06/2011

Talvez a coluna da tabela não suporte tantos caracteres.
Mostra a declaração da tabela.

att Davi
GOSTEI 0
Nilo Souza

Nilo Souza

22/06/2011

Ai esta minha tabela
CREATE TABLE FORNECEDOR
(
  IDFORN DM_ID NOT NULL,
  NOME DM_NOME,
  ENDERECO DM_ENDERECO,
  NUMERO DM_INTEIRO,
  COMPLEMENTO DM_COMPLEMENTO,
  BAIRRO DM_BAIRRO,
  CIDADE DM_CIDADE,
  INSC_ESTADUAL DM_INTEIRO,
  TELEFONE Varchar(20) CHARACTER SET NONE,
  EMAIL DM_TEXTO,
  USUARIO_INCLUI DM_INTEIRO,
  USUARIO_ALTERA DM_INTEIRO,
  CONSTRAINT PK_FORNECEDOR PRIMARY KEY (IDFORN)
);

GOSTEI 0
Dyego Carmo

Dyego Carmo

22/06/2011

REsolvido ?

Se sim , favor fechar o chamado !

Valeu !
GOSTEI 0
Nilo Souza

Nilo Souza

22/06/2011

ainda não revolvi, contina dando a mensagem de erro conforme acima.
GOSTEI 0
Davi Costa

Davi Costa

22/06/2011

Nilo,
 
vc já debugou e percebeu a diferença entre o que o java envia nas duas opções(com máscara e sem máscara)?
 
Me tira mais essa dúvida que eu não me lembro... a máscara tá funcionando?


Att Davi
GOSTEI 0
Nilo Souza

Nilo Souza

22/06/2011

Ele esta enviando formatado e esta gravando no banco. Tanto que  no mesmo form eu tenho um jtable e o campo aparece formatado 4444-8888, mas se eu formato desta forma (##) ####-####, no não salva no banco.
GOSTEI 0
Davi Costa

Davi Costa

22/06/2011

Quais valores o java mandou p banco, tinhamos que ver isso para entender pq tá dando erro no banco. Se tiver dificuldades em debugar, pode dar um system.out.println para gente analisar.

Att Davi
GOSTEI 0
Robson Teixeira

Robson Teixeira

22/06/2011

antes de gravar no banco quando vc está preenchendo o campo você consegue obter no formato (##)####-####    ???
GOSTEI 0
Nilo Souza

Nilo Souza

22/06/2011

Caro Robson, tudo bem?
Consigo sim, ao preencher o campo o formato esta presenta do jeito que pensei, mas da o problema listado acima.
GOSTEI 0
Davi Costa

Davi Costa

22/06/2011

Cara vc precisa mostrar para gente o que java está levando para o banco nas duas implementações para analisarmos bem o erro que está acontecendo.

Solução tem sim, de cara vc pode deixar a máscara do jeito que vc quer e tratar essa String removendo os dois parenteses "()", isso vc faz molim molim, mas acho que não deva ser a solução ideal. Vai resolver? Vai sim, mas temos que entender pq o banco não está aceitando a máscara que vc realmente quer. Essa sim é a solução ideal.
Por isso insistimos que vc ou debugue ou caso tenha dificuldade em debugar de um System.out.println() nesse valor para ver o que o java tá mandando para o seu banco.


Espero ter elucidado um pouco.

att Davi
GOSTEI 0
Nilo Souza

Nilo Souza

22/06/2011

A mascara de entrada do campo esta assim:

(##) ####-####, quando digito fica assim: (34) 7877-9877,
debuguei o para o banco esta deste jeito " (34) 7877-9877".

Ai me retornou a mensagem:
Não foi possível realizar a operação:
java.sql.DataTruncation: Data truncation.

Espero ter respondido. Obrigado desde já!
GOSTEI 0
Nilo Souza

Nilo Souza

22/06/2011

A mascara de entrada do campo esta assim:

(##) ####-####, quando digito fica assim: (34) 7877-9877,
debuguei o para o banco esta deste jeito " (34) 7877-9877".

Ai me retornou a mensagem:
Não foi possível realizar a operação:
java.sql.DataTruncation: Data truncation.


Meu campos esta com o formato telefone varchar(30)

Espero ter respondido. Obrigado desde já!
GOSTEI 0
Davi Costa

Davi Costa

22/06/2011

Seguinte então esse erro vc vai entender melhor vendo esse link:

http://download.oracle.com/javase/1.4.2/docs/api/java/sql/DataTruncation.html

Será que esse campo está realmente recebendo varchar de 30?

Testa passar esse texto formatado para um String, e joga essa String para o comando que dá o insert jdbc com um trim.

Por exemplo:

String telefone = .... //passa essa String formatadacom a máscara para essa variável


... e quando for montar seu insert passa telefone.trim()


Ou pode fazer a solução que eu citei no post anterior, pega essa String e remove os parênteses.

att Davi
GOSTEI 0
Dyego Carmo

Dyego Carmo

22/06/2011

Este erro de data truncation tem a ver com o tamanho do campo, o erro que você esta falando é no java ou no banco ?

GOSTEI 0
Nilo Souza

Nilo Souza

22/06/2011

Caro Dyego, o erro é no banco, quando fui no console do flemarobin e dei um inser into direto, gravou (32) 4444-9999 normal, inclusive com os parenteces, por isso eu tb acho que o erro é no java, mas não sei como resolver.
GOSTEI 0
Nilo Souza

Nilo Souza

22/06/2011

Não resolvi o problema, como mudei para o banco de dados postgresq 9, agora esta salvando com os parenteses, mas o problema persistiria se fosse no firebird. Ou seja, ainda não esta resolvido.
GOSTEI 0
Dyego Carmo

Dyego Carmo

22/06/2011

Tentou tirar estes parenteses antes de salvar ?
GOSTEI 0
Nilo Souza

Nilo Souza

22/06/2011

Se eu tirar funciona, não tem jeito ou é bug do java?
GOSTEI 0
Robson Teixeira

Robson Teixeira

22/06/2011

Olá Nilo isso é uma sugestão experimente guardar o codigo de area em outra tabela e o numero de telefone em outra.
exemplo
 digito o codigo de area 90 ai a aplicação valida no banco na tabela de ddd's vendo se existe o ddd digitado se existir você inserer o telefone no banco associando com o codigo de area na outra tabela.
 isso é uma sugestão outra que eu tentaria tambem é o driver do firebird tentaria uma versão mais nova ou uma mais compativel com a versão do banco.

espero que tenha ajudado
att
 robson
GOSTEI 0
Davi Costa

Davi Costa

22/06/2011

Complementando tudo que já foi dito.
Caso vc queira manter do jeito que está, vc retira o parênteses da String ao submeter ao banco e quando carregar do banco vc vai ter que colocar a String.

att Davi
GOSTEI 0
POSTAR