Evento KeyListener

Passoal estou desenvolvendo um projeto para meu tcc onde precisava abrir uma janela a partir de uma(ou mais) tecla(s). Sei que preciso implementar a inteface KeyListener, mas o problema é que quando adiciono os botões no JFrame os métodos sobrescritos não funcionam, alguém tem uma solução para isso.
Segue o cógigo do meu JFrame.

package br.tcc.gui.menus;

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

import br.tcc.gui.GUIFuncionario;

public class MenuPrincipal extends JFrame implements ActionListener,
		KeyListener {
	// pega a largura da tela
	int x = this.getWidth();
	// pega a altura da tela
	int y = this.getHeight();

	private final JButton btnPratos;
	private final JButton btnBebidas;
	private final JButton btnPorcoes;
	private final JButton btnSobremesas;

	public MenuPrincipal() throws IOException {
		/* dimensoes e comportamento da janela */
		setLayout(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// retira a barra de maximazar, minimizar e fechar
		setUndecorated(true);
		// faz com que a janela seja inicializada maximizada
		setExtendedState(MAXIMIZED_BOTH);
		Container all = getContentPane();

		// KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, true);

		/* inicializando os botoes */
		btnPratos = new JButton(new ImageIcon("imagens/menu_pratos.jpg"));
		btnBebidas = new JButton(new ImageIcon("imagens/menu_bebidas.jpg"));
		btnPorcoes = new JButton(new ImageIcon("imagens/menu_porcoes.jpg"));
		btnSobremesas = new JButton(
				new ImageIcon("imagens/menu_sobremesas.jpg"));

		// definindo dimensões dos botões
		btnPratos.setBounds(200, 130, 342, 256);
		btnBebidas.setBounds(740, 130, 342, 256);
		btnSobremesas.setBounds(200, 430, 342, 256);
		btnPorcoes.setBounds(740, 430, 342, 256);

		// monitorando as ações dos botões
		all.addKeyListener(this);
		btnPratos.addActionListener(this);
		btnBebidas.addActionListener(this);
		btnSobremesas.addActionListener(this);
		btnPorcoes.addActionListener(this);

		// adicionando elementos a janela
		all.add(btnBebidas);
		all.add(btnPorcoes);
		all.add(btnPratos);
		all.add(btnSobremesas);

	}

	// tratando as ações dos botões
	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == btnPratos) {
			System.out.println("Pratos");
		}
		if (e.getSource() == btnBebidas) {
			System.out.println("Bebidas");
		}
		if (e.getSource() == btnSobremesas) {
			System.out.println("Sobremesas");
		}
		if (e.getSource() == btnPorcoes) {
			System.out.println("Porções");
		}
	}

	@Override
	public void keyPressed(KeyEvent e) {
		JOptionPane.showMessageDialog(null, e.getKeyCode());
		if (e.getKeyCode() == 112) {
			GUIFuncionario telaFuncionario = new GUIFuncionario();
			telaFuncionario.setVisible(true);
		}
	}

	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
	}

	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub

	}

}

Se alguém puder me ajudar…!
Obrigado.

O listener funciona apenas com o componente que tem foco. Se quer criar teclas assim, use ActionMap e InputMap:

Muito obrigado Vinicius, testei aqui e funcionou, só não está sobrepondo o JFrame principal, vou tentar ver o que eu fiz de errado, qualquer coisa posto novamente.

Mais uma vez obrigado.