JTextField - enter ou setas mover foco

Para definir fazer o ENTER ou SETAS mudar o foco do componente basta adicionar ao componente um evento chamado KeyListener, para isso crie uma classe que implementa KeyListener como a abaixo:

EnterKeyListener

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

 

import javax.swing.JButton;

import javax.swing.JComponent;

 

/**

 * classe que tem como objetivo "ouvir" o ENTER e SETAS para enviar o foco para frente/atrás 

 * de componentes descendentes de JComponent

 */

public class EnterKeyListener implements KeyListener {

 

 private boolean permitirSetas;

 

 EnterKeyListener() {

         this.permitirSetas = false;

 }

 

 // este construtor recebe um parametro que ativa ou não setas para enviar foco frente-trás

 EnterKeyListener(boolean permitirSetas) {

         this.permitirSetas = permitirSetas;

 }

 

 public void keyPressed(KeyEvent e) {

         // se o componente é instancia de JComponent

         if (e.getSource() instanceof JComponent) {

                 // pressionou ENTER? ou se as setas são permitidas, pressionou SETA PARA BAIXO?

                 if (e.getKeyCode() == KeyEvent.VK_ENTER || (permitirSetas && e.getKeyCode() == KeyEvent.VK_DOWN)) {

                         // se for um JButton e pressionou ENTER faremos o click

                         if (e.getSource() instanceof JButton && e.getKeyCode() == KeyEvent.VK_ENTER) {

                                 ((JButton)e.getSource()).doClick();

                         else

                                 ((JComponent)e.getSource()).transferFocus(); // se não, apenas tranferimos o foco  

                 }

 

                 // SETA PARA CIMA, manda o foco para "trás"

                 if (permitirSetas && e.getKeyCode() == KeyEvent.VK_UP) {

                         ((JComponent)e.getSource()).transferFocusBackward();  

                 }

         }

 }

 

 public void keyReleased(KeyEvent e){}

 public void keyTyped(KeyEvent e){}

}

 

Exemplo de uso

 

import java.awt.FlowLayout;

import javax.swing.JFrame;

import javax.swing.JTextField;

 

public class Geral extends JFrame {

 

      private JFieldText campo1;

      private JFieldText campo2;

 

 public Geral() {

     setSize(200110);

     setDefaultCloseOperation(EXIT_ON_CLOSE);

     setLayout(new FlowLayout());

 

          campo1 = new JFieldText(7);

     campo2 = new JFieldText(10);

 

     add(campo1);

     add(campo2);

       

    // aqui associamos os eventos enter

    campo1.addKeyListener(new EnterKeyListener());

    campo2.addKeyListener(new EnterKeyListener());

       

    setVisible(true);

 }

 

 public static void main(String[] args) {

         new Geral();

 }        

}