pessoal alguém sabe como eu faço pra um jtextfield aceitar apenas teclas númerica :?:s [telefone removido] a tecla enter e backspace??? :?:
RESOLVIDO - Jtextfield apenas números
14 Respostas
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
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();
}
como ficaria se isso fosse uma função esse que eu fiz
Neste tutorial deve ter alguma coisa que te ajude http://www.guj.com.br/article.show.logic?id=29 flw
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();
}
}
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();
}
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();
}
}
dá também
mas e pra faze uma função disto alguém sabe como que fica ?
vc esta utilizando qual IDE ?
aproveite os recursos e não sofra, veja a resposta que coloquei. Não faça POG.
JDEVELOPER
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.
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
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é.