Tenho um JFrame principal (tela inicial do aplicativo) que faz chamada às outras classes. Uma outra classe Calculadora (que é chamada da tela inicial) é tb um JFrame e é composta de botões que compõem o teclado da calculadora e têm suas funcionalidades escritas numa subclasse que implementa a ActionListener.
O problema é que agora inclui uma outra subclasse que implementa a KeyListener mas nada funciona via teclado.
Tentei incluir inicialmente apenas a função do KeyEvent dentro da subclasse que implementa a ActionListener e não funcionou pois precisei implementar o KeyListener no JFrame, só que fazendo isso tenho erro de compilação pois a classe Calculadora não é abstrata. Seu eu colocar ela como abstrata sou impedido de chamar ela pela tela principal pois a tela principal passa parâmetros para essa classe.
Alguém pode me dizer como devo estruturar o código para ter a funcionalidade dos botões e do teclado (de preferência sem precisar reescrever as funções já existentes na subclasse que implementa a ActionListener)?
Seguem trechos do código como está agora, ou seja, uma classe separada estendendo da classe KeyAdapter:
public class CalcConvFrame extends JFrame {
...
...
Treatment09 treat36 = new Treatment09();
this.addKeyListener(treat36);
...
class Treatment09 extends KeyAdapter {
public void keyPressed(KeyEvent ccfk) {
// ----------------------------------------------------------------
// Eventos do Teclado
// Saída do CalcConvFrame
if(ccfk.getKeyCode() == ccfk.VK_ESCAPE) {
Object Butns[] = {" Sim ", " Não "};
int closing = JOptionPane.showOptionDialog(null, "Deseja mesmo encerrar o aplicativo?", "Sair", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, Butns, Butns[1]);
if(closing == JOptionPane.YES_OPTION) CalcConvFrame.this.dispose();
}
if((ccfk.getKeyCode() >= ccfk.VK_NUMPAD0) && (ccfk.getKeyCode() <= ccfk.VK_NUMPAD9)) knumbr(""+ccfk.getKeyChar());
if(ccfk.getKeyCode() == 110) kcomma();
if(ccfk.getKeyCode() == 8) kbkspc();
if(ccfk.getKeyCode() == 107) knplus();
if(ccfk.getKeyCode() == 109) knless();
if(ccfk.getKeyCode() == 111) kdivis();
if(ccfk.getKeyCode() == 106) ktimes();
if(ccfk.getKeyCode() == 80) kprcnt();
if(ccfk.getKeyCode() == 10) kenter();
}
// ----------------------------------------------------------
// Entrada de Números pelo Teclado
public void knumbr(String s) {
if(vldisplay == "0,00") vldisplay = "";
vldisplay = vldisplay + s;
display.setText(formatStrNum(vldisplay, vldecimals));
}
...