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);
}
}