Ola galera , então eu queria saber como filtrar um campo para só receber numeros ou so receber letras.Acho que não tem necessidade de postar um codigo aqui pois procurei e até agora não achei nada nada sobre isso. Estou usando o netbeans 7.1.1
existe os campos de texto formatados(JFormattedTextField).
Pesquise sobre eles e sobre suas máscaras.
Y
yurisisbell
mateusviccari:
existe os campos de texto formatados(JFormattedTextField).
Pesquise sobre eles e sobre suas máscaras.
Agradeço cara vo da uma pesquisada aqui no guj mesmo . Eu ja utilizo 3 campos com JFormattedTextField mas 1 fica no formato de data ##/##/#### e outro pra preço #### mas para filtrar os caracteres eu não sabia que usava JFormattedTextField . obgrigado
Não aconselho voce usar esse tipo de campo pra trabalhar com valores. Use um componente especifico pra isso.
Tenho um componente que eu fiz baseado em jTextField, voce trabalha direto com variaveis do tipo double através do metodo getValor e setValor. fica bem melhor pra trabalhar.
Segue o exemplo, voce pode editar de acordo com suas necessidades:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package_componentes;importjava.awt.Color;importjava.awt.event.FocusEvent;importjava.awt.event.FocusListener;importjava.math.BigDecimal;importjava.text.DecimalFormat;importjava.text.ParseException;importjavax.swing.JTextField;publicclassJPilaFieldextendsJTextField{DecimalFormatformato;privateBigDecimalvalor;publicJPilaField(){valor=newBigDecimal("0");aplicarListeners();formato=newDecimalFormat("###,##0.00########; -###,##0.00########");setValor(0.0);}publicvoidsetFormato(Stringformato){this.formato=newDecimalFormat(formato);}publicdoublegetValor(){returnvalor.doubleValue();}publicvoidsetValor(doublevalor){this.valor=newBigDecimal(valor+"");setText(formato.format(this.valor.doubleValue()));}privatevoidfocoSai(FocusEventevt){try{valor=newBigDecimal(getText().replace(".","").replaceAll(",","."));setText(formato.format(valor.doubleValue()));}catch(Exceptionex){setText("Valor inválido");}}privatevoidfocoEntra(FocusEventevt){selectAll();}privatevoidaplicarListeners(){this.addFocusListener(newFocusListener(){@OverridepublicvoidfocusLost(FocusEventevt){focoSai(evt);}@OverridepublicvoidfocusGained(FocusEventevt){focoEntra(evt);}});}}
Y
yurisisbell
mateusviccari:
Não aconselho voce usar esse tipo de campo pra trabalhar com valores. Use um componente especifico pra isso.
Tenho um componente que eu fiz baseado em jTextField, voce trabalha direto com variaveis do tipo double através do metodo getValor e setValor. fica bem melhor pra trabalhar.
Segue o exemplo:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package_componentes;importjava.awt.Color;importjava.awt.event.FocusEvent;importjava.awt.event.FocusListener;importjava.math.BigDecimal;importjava.text.DecimalFormat;importjava.text.ParseException;importjavax.swing.JTextField;publicclassJPilaFieldextendsJTextField{DecimalFormatformato;privateBigDecimalvalor;publicJPilaField(){valor=newBigDecimal("0");aplicarListeners();formato=newDecimalFormat("###,##0.00########; -###,##0.00########");setValor(0.0);}publicvoidsetFormato(Stringformato){this.formato=newDecimalFormat(formato);}publicdoublegetValor(){returnvalor.doubleValue();}publicvoidsetValor(doublevalor){this.valor=newBigDecimal(valor+"");setText(formato.format(this.valor.doubleValue()));}privatevoidfocoSai(FocusEventevt){try{valor=newBigDecimal(getText().replace(".","").replaceAll(",","."));setText(formato.format(valor.doubleValue()));}catch(Exceptionex){setText("Valor inválido");}}privatevoidfocoEntra(FocusEventevt){selectAll();}privatevoidaplicarListeners(){this.addFocusListener(newFocusListener(){@OverridepublicvoidfocusLost(FocusEventevt){focoSai(evt);}@OverridepublicvoidfocusGained(FocusEventevt){focoEntra(evt);}});}}
Agradeço ai mas não entendi o que extamante essa varialvel valor vai fazer .no meu caso eu subistituiria o "formato " por "txtPreço"?esse valor seria só para validar o campo?
Abraços
mateusviccari
Esse código que eu postei é um componente Swing, se tu tentar criar uma classe la no seu netbeans e jogar esse código dentro, e depois criar um JFrame, voce pode arrastar essa classe pra dentro do seu jframe e vai ver que ele vai criar um campo de texto do mesmo jeito que voce arrasta da paleta do netbeans.
A vantagem desse componente é que voce trabalha direto com valores, sem precisar ficar fazendo parseDouble.
O comportamento do componente é o seguinte, voce digita um valor, tanto faz com virgula ou ponto, que quando o foco sair do componente ele vai formatar o valor do componente de acordo com o formato que voce definir no codigo do componente.
Esse valor que aparece ai no componente vai armazenar o valor que esta setado nas instancias de cada componente.
A variavel formato é uma variavel que só é usada pelo componente pra mostrar o preço na tela. mas o valor fica na variavel valor, que é do tipo BigDecimal.
Tu pode até fazer ficar com o R$ na frente, é so alterar esse trecho de codigo deixando assim:
Aconselho a voce testar o componente, vai entender melhor o que eu to falando.
Qualquer duvida pede aí.
Y
yurisisbell
mateusviccari:
Esse código que eu postei é um componente Swing, se tu tentar criar uma classe la no seu netbeans e jogar esse código dentro, e depois criar um JFrame, voce pode arrastar essa classe pra dentro do seu jframe e vai ver que ele vai criar um campo de texto do mesmo jeito que voce arrasta da paleta do netbeans.
A vantagem desse componente é que voce trabalha direto com valores, sem precisar ficar fazendo parseDouble.
O comportamento do componente é o seguinte, voce digita um valor, tanto faz com virgula ou ponto, que quando o foco sair do componente ele vai formatar o valor do componente de acordo com o formato que voce definir no codigo do componente.
Esse valor que aparece ai no componente vai armazenar o valor que esta setado nas instancias de cada componente.
A variavel formato é uma variavel que só é usada pelo componente pra mostrar o preço na tela. mas o valor fica na variavel valor, que é do tipo BigDecimal.
Tu pode até fazer ficar com o R$ na frente, é so alterar esse trecho de codigo deixando assim:
Aconselho a voce testar o componente, vai entender melhor o que eu to falando.
Qualquer duvida pede aí.
Obrigado mesmo pela atenção !! entendi sim o que você disse . Estou no estagio e não posso testar agora pois não tenho o netbeans instalado . Hoje a noite tenho aula e vou verificar isso . obrigado , depois posto se consegui resolver !