Key Listener em JTextField dentro de JPanel

3 respostas
N

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?

3 Respostas

Marky.Vasconcelos

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

Você pode adicionar um KeyListener diretamente ao JPanel.

N

Marky.Vasconcelos:
Quando o field é focado ele não recebe os eventos?

Você pode adicionar um KeyListener diretamente ao JPanel.

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.

MisaelJavaPJ

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);
		
	}
}
Criado 23 de julho de 2015
Ultima resposta 25 de jul. de 2015
Respostas 3
Participantes 3