RESOLVIDO - Jtextfield apenas números

14 respostas
G

pessoal alguém sabe como eu faço pra um jtextfield aceitar apenas teclas númerica :?:s [telefone removido] a tecla enter e backspace??? :?:

14 Respostas

Javabuntu

mui simples:

public class OnlyNumber implements KeyListener {

	private int fieldLength;
	public void keyTyped(KeyEvent event) {
		JTextField jtf = (JTextField) event.getSource();
		char key = event.getKeyChar();
		boolean press = (key == KeyEvent.VK_SPACE || key == KeyEvent.VK_DELETE || Character
				.isDigit(key));
		if (!press || jtf.getText().length() == getFieldLength()) {
			event.consume();
		}
	}

	public void keyPressed(KeyEvent event) {
                     //
	}	
	public void keyReleased(KeyEvent event) {
                    //
	}
	public int getFieldLength() {
		return fieldLength;
	}
	public void setFieldLength(int fieldLength) {
		this.fieldLength = fieldLength;
	}

agora no seu JTextfield adicione o keylistener OnlyNumber que é a classe implementada acima. Eu quando precisei implementei uma classe separada, mas se quiser fazer como uma inner class…
Nesse caso a classe ainda recebe um int pra definir o limite de caracteres desejado, e aceita teclas numéricas, delete e space, no seu caso basta alterar o delete pra enter.
mas fácil que isso só sopa de minhoca.
[]'s Hewerton Crisóstomo

G
if (e.getKeyChar() == e.VK_BACK_SPACE || (e.getKeyChar() == e.VK_0)|| (e.getKeyChar() == e.VK_1)|| (e.getKeyChar() == e.VK_2) 
            || (e.getKeyChar() == e.VK_3)|| (e.getKeyChar() == e.VK_4)|| (e.getKeyChar() == e.VK_5)|| (e.getKeyChar() == e.VK_6)|| (e.getKeyChar() == e.VK_7)
            || (e.getKeyChar() == e.VK_8)|| (e.getKeyChar() == e.VK_9)||(e.getKeyChar() == e.VK_ENTER))
          {          
        
          }
        else
          {
            e.consume();
          }
G

como ficaria se isso fosse uma função esse que eu fiz

tinorberto

Neste tutorial deve ter alguma coisa que te ajude http://www.guj.com.br/article.show.logic?id=29 flw

G

tem que te extends?

public class LimitaTeclas (KeyEvent e)
    {
        if (e.getKeyChar() == e.VK_BACK_SPACE || (e.getKeyChar() == e.VK_0)|| (e.getKeyChar() == e.VK_1)|| (e.getKeyChar() == e.VK_2) 
            || (e.getKeyChar() == e.VK_3)|| (e.getKeyChar() == e.VK_4)|| (e.getKeyChar() == e.VK_5)|| (e.getKeyChar() == e.VK_6)|| (e.getKeyChar() == e.VK_7)
            || (e.getKeyChar() == e.VK_8)|| (e.getKeyChar() == e.VK_9)||(e.getKeyChar() == e.VK_ENTER))
          {          
        
          }
        else
          {
            e.consume();
          }  
    }
thiago.correa
gustavoa:
if (e.getKeyChar() == e.VK_BACK_SPACE || (e.getKeyChar() == e.VK_0)|| (e.getKeyChar() == e.VK_1)|| (e.getKeyChar() == e.VK_2) 
            || (e.getKeyChar() == e.VK_3)|| (e.getKeyChar() == e.VK_4)|| (e.getKeyChar() == e.VK_5)|| (e.getKeyChar() == e.VK_6)|| (e.getKeyChar() == e.VK_7)
            || (e.getKeyChar() == e.VK_8)|| (e.getKeyChar() == e.VK_9)||(e.getKeyChar() == e.VK_ENTER))
          {          
        
          }
        else
          {
            e.consume();
          }

Não seria mais fácil fazer assim

if (!(e.getKeyChar() >= KeyEvent.VK_0 && e.getKeyChar() <= KeyEvent.VK_9) || e.getKeyChar() == KeyEvent.VK_ENTER || e.getKeyChar() == KeyEvent.VK_SPACE || e.getKeyChar() == KeyEvent.VK_BACK_SPACE)) {
    e.consume();
}
???
thiago.correa

Vai aí uma classe de exemplo

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

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


class Class3 extends JFrame {

    JTextField f = new JTextField();

    public Class3() {
        this.setVisible(true);
        add(f);

        f.addKeyListener(new KeyListener() {

                    public void keyTyped(KeyEvent e) {
                        if (!((e.getKeyChar() >= KeyEvent.VK_0 && 
                               e.getKeyChar() <= KeyEvent.VK_9) || 
                              (e.getKeyChar() == KeyEvent.VK_ENTER || 
                               e.getKeyChar() == KeyEvent.VK_SPACE || 
                               e.getKeyChar() == KeyEvent.VK_BACK_SPACE))) {
                            e.consume();
                        }
                    }

                    public void keyPressed(KeyEvent e) {
                    }

                    public void keyReleased(KeyEvent e) {
                    }
                });

        setVisible(true);
        pack();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }


    public static void main(String[] args) {
        new Class3();

    }

}
G

dá também :smiley: mas e pra faze uma função disto alguém sabe como que fica ?

V

vc esta utilizando qual IDE ?

Javabuntu

aproveite os recursos e não sofra, veja a resposta que coloquei. Não faça POG.

G

JDEVELOPER

V

eu tenho uma classe q extend JTextField que permite apenas numeros. Eu utilizo o netbeans e posso colocar esta classe como um componente, dai eh so arrastar pro form.

71C4700

Neste link tem uma biblioteca chamada DAXComponents, nela tem uma classe chamada DText

Para utilizala da pra colocar no Netbeans ou cria-la ao inves de new JTextField(), faz new DText().

A vantagem é que vc pode determinar se quer comente numeros e o seu tamnho, tipo que nesta caixa de texto tenha apenas 5 caracteres.

Neste artigo tem um link pra um arquivo, baixe-o e veja o projeto, é utilizando JTable, mas so lhe interressa a classe DText.

Se nao me engano, fica no pacote dax.swing.text. Mas veja la, tem um .jar com esta biblioteca

J

Faz assim, cria uma classe documento e no textField você substitui o mesmo.
Por exemplo:

textField.setDocument(new Documeto(true));

public class Documento extends PlainDocument
{
    private boolean numero;

    public Document(boolan isNumber)
    {
        super();
        numero = isNumber;
    }

    @Override
    public void insertString(int offs, String str, AttributeSet attribute)
            throws BadLocationException
    {
        if(numero == true)
        {
//verifica se o caracter inserido é um numero, caso não seja o mesmo não é inserido no campo
            for (char c : str.toCharArray())
            {
                if(!Character.isDigit(c))
                {
                    return;
                }
            }
        } 
            
//caso ele chegue até aqui significa que o caracteres é um digito (0-9), então o mesmo é inserido no campo.
super.insertString(offs, str.toUpperCase(), attribute);     
    }

espero que ajude.
até.

Criado 4 de maio de 2009
Ultima resposta 5 de mai. de 2009
Respostas 14
Participantes 7