TextField() que aceite só numeros

Olá Pessoal, Como eu faço para que o TextField() aceite só numeros e não letras, e tambem nunca passar para o proximo
qdo estiver vazio ("");

dê uma olhada no componente JFormattedTextField, ele resolve esse negocio dos numeros, qto ao preenchimento nunca fiz algo parecido, mas deva ter algum jeito…

Acho que o jeito mais correto é você adicionar um KeyListener à esse TextField para que, quando for digitado algo que não seja um número, apagar esse caractere ou qualquer coisa que você achar melhor

Quanto a não passar para o próximo, é só você setar como desabilitado os outros componentes enquanto esse TextField não for preenchido. Você pode fazer isso com um if no KeyListener que eu falei antes.

[]´s

Cara eu uso netbeans e fiz assim:

Codigo.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
CodigoKeyTyped(evt);
}
});

private void CodigoKeyTyped(java.awt.event.KeyEvent evt) {
if (!Character.isDigit(evt.getKeyChar())) {
evt.consume();
}
}

campo só aceita numeros, agora para não passar para o próximo campo vázio eu nunca fiz isso, mas tem como fazer com toda certeza. Eu imagino que com o evento focuslost voçê possa fazer isso.

falou…

Bom dia DAPEDRA,

Quanto a não passar para o proximo JTextField quando estiver vazio(""), você pode resolver usando a interface FocusListener. No focusLost você verifica se está vazio, e se estiver, você transfere o foco para o componente anterior.

Estou postando o código abaixo para você ver como funcionaria na prática.

import java.awt.FlowLayout;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class Main extends JFrame {
    
    JTextField[] txt;
    JButton btn;
    
    public Main () {
        super("Teste");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400,400);
        setLayout(new FlowLayout());
        
        txt = new JTextField[5];
        Evento x = new Evento();
        for (int i = 0; i < txt.length; i++) {
            txt[i] = new JTextField(10);
            txt[i].addFocusListener(x);
            add(txt[i]);
        }
        btn = new JButton("Aumentar");
        add(btn);
    }
    
    public static void main(String[] args) {
        Main starter = new Main();
        starter.setVisible(true);
        
    }
    
    private class Evento implements FocusListener {
        public void focusGained(FocusEvent e) {
            
        }

        public void focusLost(FocusEvent e) {
            if (((JTextField)e.getComponent()).getText().equals(""))
                e.getComponent().transferFocusBackward();
        }
        
    }

}

Espero ter ajudado…
Att