我要做一个计算器的图形界面程序,用鼠标点击按钮、显示、计算等一系列功能都实现了,我想实现从键盘按按键来控制程序的功能,但是按键相应部分出现了问题,好像我按什么建都不响应,这是为什么? 还望指点
 
程序如下:
package exercise;import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class Calculator extends JFrame implements KeyListener,ActionListener
{
  JLabel label;
  String line="";  //存储计算器显示区域的字符串
  double left,right;  //存放左右操作数
  Container contentPane;
  JPanel panel;
  JButton button[];
  char operate;  //标记是何种运算符号  public Calculator(String title)  //构造器
  {
    super(title);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    contentPane=getContentPane();  //获取内容格
    contentPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
    label=new JLabel("0.");
    label.setBackground(Color.white);
    label.setForeground(Color.blue);
    contentPane.add(label);    button=new JButton[20];
    button[0]=new JButton("Backspace");  //定义一系列按钮
    button[1]=new JButton("CE");
    button[2]=new JButton("C");
    button[3]=new JButton("=");
    button[4]=new JButton("7");
    button[5]=new JButton("8");
    button[6]=new JButton("9");
    button[7]=new JButton("/");
    button[8]=new JButton("4");
    button[9]=new JButton("5");
    button[10]=new JButton("6");
    button[11]=new JButton("*");
    button[12]=new JButton("1");
    button[13]=new JButton("2");
    button[14]=new JButton("3");
    button[15]=new JButton("-");
    button[16]=new JButton("0");
    button[17]=new JButton("+/-");
    button[18]=new JButton(".");
    button[19]=new JButton("+");
    panel=new JPanel();
    panel.setLayout(new GridLayout(5,4,5,5));
    for(int i=0;i<button.length;i++)  //加三个控制按钮
      panel.add(button[i]);
    contentPane.add(panel);  //将第一个面板加入到内容格
    for(int i=0;i<button.length;i++)  //将当前对象作为所有按钮的监听者
    {
      button[i].addActionListener(this);
    }
    addKeyListener(this);
    setSize(425,230);
    setVisible(true);
  }  public void actionPerformed(ActionEvent e)
  {
    //数字0~9的相应方式
    if(e.getSource()==button[16]) {line+=0; label.setText(line);}
    if(e.getSource()==button[12]) {line+=1; label.setText(line);}
    if(e.getSource()==button[13]) {line+=2; label.setText(line);}
    if(e.getSource()==button[14]) {line+=3; label.setText(line);}
    if(e.getSource()==button[8]) {line+=4; label.setText(line);}
    if(e.getSource()==button[9]) {line+=5; label.setText(line);}
    if(e.getSource()==button[10]) {line+=6; label.setText(line);}
    if(e.getSource()==button[4]) {line+=7; label.setText(line);}
    if(e.getSource()==button[5]) {line+=8; label.setText(line);}
    if(e.getSource()==button[6]) {line+=9; label.setText(line);}    if(e.getSource()==button[0])  //"Backspace"
    {
      int num=line.length();  //获取当前显示的字符串的长度
      if(num>1)
      {
        line=line.substring(0,line.length()-1); label.setText(line);
      }
      if(num==1)
      { line=""; label.setText("0.");}
     }
    if(e.getSource()==button[1])  //"CE" 清屏,把当前显示区的内容清空
    { line=""; label.setText("0.");}
    if(e.getSource()==button[2])  //"C"  复位
    {
      line=""; operate='\0'; left=right=0; label.setText("0.");
    }
    if(e.getSource()==button[3])  //"="
    {
      right=Double.parseDouble(line); line="";
      String result="";
      if(operate=='+') result=String.valueOf(left+right);
      if(operate=='-') result=String.valueOf(left-right);
      if(operate=='*') result=String.valueOf(left*right);
      if(operate=='/') result=String.valueOf(left/right);
      label.setText(result);
    }
    if(e.getSource()==button[7])  //"/"
    {
      left = Double.parseDouble(line); line=""; operate='/';
    }
    if(e.getSource()==button[11])  //"*"
    {
      left = Double.parseDouble(line); line=""; operate='*';
    }
    if(e.getSource()==button[15])  //"-"
    {
      left = Double.parseDouble(line); line=""; operate='-';
    }
    if(e.getSource()==button[17])  //"+/-"  翻转符号
    {
      double num=Double.parseDouble(line);
      num=-num; line=String.valueOf(num); label.setText(line);
    }
    if(e.getSource()==button[18])   //"."小数点
    {if(line.indexOf('.')==-1) //如果字符串中没有小数点,则加上小数点,否则无效
      { line += "."; label.setText(line); }
    }
    if(e.getSource()==button[19])  //"+"
    {
      left = Double.parseDouble(line); line=""; operate='+';
    }
  }
  public void keyPressed(KeyEvent e)
  {
    String keyText="";
    if(e.isShiftDown())
    {
      keyText = e.getKeyText(e.getKeyCode());
      if(keyText.equals("8")) keyText="*";
      if(keyText.equals("-")) keyText="-";
      if(keyText.equals("=")) keyText="+";
    }
    else
    {
      keyText = e.getKeyText(e.getKeyCode());
      if(keyText.equals("0") || keyText.equals("1") || keyText.equals("2") || keyText.equals("3") || keyText.equals("4") ||
         keyText.equals("5") || keyText.equals("6") || keyText.equals("7") || keyText.equals("8") || keyText.equals("9") ||
         keyText.equals("."));
      else
        keyText="";
    }    //数字0~9的相应方式
    if(keyText.equals("0")) {line+=0; label.setText(line);}
    if(keyText.equals("1")) {line+=1; label.setText(line);}
    if(keyText.equals("2")) {line+=2; label.setText(line);}
    if(keyText.equals("3")) {line+=3; label.setText(line);}
    if(keyText.equals("4")) {line+=4; label.setText(line);}
    if(keyText.equals("5")) {line+=5; label.setText(line);}
    if(keyText.equals("6")) {line+=6; label.setText(line);}
    if(keyText.equals("7")) {line+=7; label.setText(line);}
    if(keyText.equals("8")) {line+=8; label.setText(line);}
    if(keyText.equals("9")) {line+=9; label.setText(line);}    if(keyText.equals("Backspace"))  //"Backspace"
    {
      int num=line.length();  //获取当前显示的字符串的长度
      if(num>1)
      {
        line=line.substring(0,line.length()-1); label.setText(line);
      }
      if(num==1)
      { line=""; label.setText("0.");}
     }
    if(keyText.equals("="))  //"="
    {
      right=Double.parseDouble(line); line="";
      String result="";
      if(operate=='+') result=String.valueOf(left+right);
      if(operate=='-') result=String.valueOf(left-right);
      if(operate=='*') result=String.valueOf(left*right);
      if(operate=='/') result=String.valueOf(left/right);
      label.setText(result);
    }
    if(keyText.equals("/"))  //"/"
    {
      left = Double.parseDouble(line); line=""; operate='/';
    }
    if(keyText.equals("*"))  //"*"
    {
      left = Double.parseDouble(line); line=""; operate='*';
    }
    if(keyText.equals("-"))  //"-"
    {
      left = Double.parseDouble(line); line=""; operate='-';
    }
    if(keyText.equals("."))   //"."小数点
    {if(line.indexOf('.')==-1) //如果字符串中没有小数点,则加上小数点,否则无效
      { line += "."; label.setText(line); }
    }
    if(keyText.equals("+"))  //"+"
    {
      left = Double.parseDouble(line); line=""; operate='+';
    }  }  public void keyTyped(KeyEvent e)  {}
  public void keyReleased(KeyEvent e)  {}  public static void main(String[] args)
  {
    Calculator obj=new Calculator("计算器");
  }
}