Key Listener em JTextField dentro de JPanel

Boa tarde galera. Estou criando um JPanel que contem dentro dele um JTextField já com um KeyListener adicionado, porém, ele não está pegando o evento de key. Pesquisando no Google descobri que o KeyListener só é chamado quando o componente está focado, e que o JPanel não consegue ser focado. Há algum jeito de manter o meu Keylistener de um JTextField que está dentro do JPanel?

Quando o field é focado ele não recebe os eventos?

Você pode adicionar um KeyListener diretamente ao JPanel.

[quote=Marky.Vasconcelos]Quando o field é focado ele não recebe os eventos?

Você pode adicionar um KeyListener diretamente ao JPanel.[/quote]

Sim, eu escrevo e nada acontece, nenhum evento é chamado. O grande problema de adicionar o Key listener é que eu queria usar um JtextField que eu já fiz, além disso também queria que quando ultrapassasse x letras pulasse pra próxima textfield

Implementei o key listener dentro do JPanel, mesmo assim continua não disparando nenhum evento.

Nicksf13, boa madrugada meu caro

Dê uma estudada nesses códigos que fiz, veja se lhe servem

package br.com.mchomem.prototipo;

public class Program {

	public static void main(String []args) {
		
		new Form();
				
	}
		
}
package br.com.mchomem.prototipo;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

public class Form extends JFrame {

	private static final long serialVersionUID = 4822841918965724052L;
	private JPanel contentPane;
	private JTextField txtField1;
	private JTextField txtField2;
	private JTextField txtField3;
	private Dimension dimesion = Toolkit.getDefaultToolkit().getScreenSize();

	public Form() {
		
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 305, 140);
		setLocation( (dimesion.width - this.getWidth()) / 2, (dimesion.height - this.getHeight()) / 2);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		txtField1 = new JTextField();
		txtField1.addKeyListener(new KeyAdapter() {
			
			@Override
			public void keyTyped(KeyEvent e) {
				
				if(e.getKeyCode() == KeyEvent.VK_A) {
					JOptionPane.showMessageDialog(null, "Tecla A capturada", "Aviso", JOptionPane.WARNING_MESSAGE);
				}
				
				int txtLen = txtField1.getText().length();
				
				if(txtField1.getText().length() > 10) {
					txtField1.setText( txtField1.getText().substring(0, txtLen - 1 ) );
					txtField2.requestFocus();
				}
				
			}
		});
		
		txtField1.setBounds(29, 11, 238, 20);
		
		txtField1.setColumns(10);
		
		txtField2 = new JTextField();
		txtField2.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				
				int txtLen = txtField1.getText().length();
				
				if(txtField2.getText().length() > 10) {
					txtField2.setText( txtField2.getText().substring(0, txtLen - 1 ) );
					txtField3.requestFocus();
				}
				
			}
		});
		txtField2.setBounds(28, 42, 239, 20);
		
		txtField2.setColumns(10);
		
		txtField3 = new JTextField();
		txtField3.addKeyListener(new KeyAdapter() {
			@Override
			public void keyTyped(KeyEvent e) {
				
				int txtLen = txtField1.getText().length();
				
				if(txtField3.getText().length() > 10) {
					txtField3.setText( txtField3.getText().substring(0, txtLen - 1 ) );
					txtField1.requestFocus();
				}
				
			}
		});
		txtField3.setBounds(29, 73, 238, 20);

		contentPane.add(txtField1);
		contentPane.add(txtField2);
		contentPane.add(txtField3);
		txtField3.setColumns(10);
		setVisible(true);
		
	}
}