JTextfield que aceita apenas números 8


É importante fazer com que a validação de dados digitado pelo usuário seja feita já no componente gráfico de forma a evitar dados inconsistente e falhas no sistema. Java dispões de diversos recursos para  isso, segue abaixo uma das formas de permitir que um componente texto (um JTextField no nosso caso) aceite apenas a entrada de números inteiros.


Classe OnlyNumberField.java

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
/**
* Restringe a digitação de apenas numeros em um componentes de texto como o JTextField
* Uso: setDocument(new OnlyNumberField());
* @author Eduardo Costa - www.dimensaotech.com
*
*/
public class OnlyNumberField extends PlainDocument
{

private int maxlength;

public OnlyNumberField(){}

public OnlyNumberField(int maxlength)
{
super();
this.maxlength = maxlength;
}

public void insertString(int offs, String str, AttributeSet a)
{
try
{
Integer.parseInt(str);
} catch (NumberFormatException ex)
{
str = "";
}
try
{
boolean fixedLengh = (!((getLength() + str.length()) > maxlength));
if (maxlength == 0 || fixedLengh)
super.insertString(offs, str, a);
} catch (BadLocationException e)
{
e.printStackTrace();
}
}

}

Classe TesteOnlyNumberField .java

import javax.swing.JFrame;
import javax.swing.JTextField;

public class TesteOnlyNumberField {

public static void main(String args[])
{
JTextField campoTexto = new JTextField();
campoTexto.setDocument(new OnlyNumberField());
JFrame f = new JFrame("Apenas Números");
f.getContentPane().add(campoTexto);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(300,100);
f.setVisible(true);

}
}

Últimos 5 artigos de Eduardo Costa

Sobre Eduardo Costa

De Campinas-SP, bacharel em Sistema de Informação pela Anhanguera Educacional e pós graduado no curso de MBA em Gestão de Projetos e Metodologia do Ensino Superior. Atualmente trabalha como arquiteto e desenvolvedor Java em empresa de desenvolvimento de software de suporte a tomada de decisão, além de ministrar aulas de Orientação a Objeto, Linguagem Java e XML. Já atuou como líder técnico, coordenador de produto e analista de negócios.

Deixe uma resposta para EdRabelo Cancelar resposta

8 pensamentos em “JTextfield que aceita apenas números

  • Vanderson

    Não sei se ainda tem alguém vivo por aqui… Mas estou precisando de ajuda!
    Esta funcionando perfeitamente quanto a restringir o campo em só números… O problema é que esta limitando a quantidade de números! Por exemplo, eu gravo um Nr de CPF (11 dígitos), só que na hora que dou getCPF ele não trás nada! E os 11 digitos estão no banco…

  • Jean Carlos

    Amigo por favor me ajude! Pesquisei sobre JFormattedField porém não achei a solução para inserir valores do tipo Double ja que a classe restringe o (.)

    E pelo que vi no docs da oracle o insertString trabalha apenas com int :S

  • EdRabelo

    Queria deixar aqui o meu Muito obrigado ao Eduardo Costa, Já havia pesquisado bastante sobre como fazer isso e nenhuma das formas encontradas atendia minhas necessidades como essa e nem era tão fácil aplicá-las. Valeu Eduardo!! \o/

  • Kaio Jonathas

    Tu pode me dizer como vou usar a classe OnlyNumberField? Tipo, eu criei um JTextField em outra classe, como faço para que ele aceite só numeros? Como faço para ele mostrar uma janela na exception quando o usuário digitar um letra? Se poder responder o mais rápido possível seria muito bom mesmo cara. 😀 Obrigado pelos espaço.