Criei uma tela estendendo de JFrame, limpa. Criei uma classe estendendo de JPanel onde coloquei uma imagem de background e um botão “sair”, apenas isso. Na classe principal eu inicio a classe tela, a painel e uma classe controller. Envio a tela e o painel como parâmetros para controller. No construtor do controler é adicionado o painel na tela. Até aí beleza. A classe controller implementa ActionListener e contem uma classe interna que implementa KeyListener.
O evento do teclado (botão ESC) funciona perfeitamente, mas a partir do clique no botão sair, que também funciona, o KeyListener não funciona mais. Eu coloquei outro botão sem tratamento de evento e ocorre o mesmo se clicar nele, o KeyListener não funciona mais. E não ocorre nenhum erro, pelo menos o Eclipse não avisa nada.
Onde estou errando? Agradeço desde já. 
package br.com.alexandre.controller;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import br.com.alexandre.model.PainelTela;
import br.com.alexandre.view.Mensagem;
import br.com.alexandre.view.Tela;
public class Controller implements ActionListener{
private Tela tela;
private PainelTela painelTela;
public Controller(Tela tela, PainelTela painelTela) {
this.tela = tela;
this.painelTela = painelTela;
this.tela.add(painelTela);
this.tela.repaint();
}
public void control() {
painelTela.getSairButton().addActionListener(this);
tela.addKeyListener(new KeyHandler());
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==painelTela.getSairButton()){
if(Mensagem.confirmaSair())
System.exit(0);
}
}
public class KeyHandler extends KeyAdapter {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_ESCAPE){
if(Mensagem.confirmaSair())
System.exit(0);
}
}
}
}