初学者Java程序--无法按键工作

初学者Java程序--无法按键工作,java,applet,awt,keylistener,Java,Applet,Awt,Keylistener,我从Java开始,我遇到了一个问题。当人们点击java小程序上的“a”时,我希望它画一个黄色的矩形,如果他们按下其他任何按钮,它会画一个黑色的矩形,但什么也没有发生 import java.awt.*; import java.applet.*; import javax.swing.*; import java.awt.event.*; import java.awt.event.KeyListener; import java.awt.event.KeyEvent; public

我从Java开始,我遇到了一个问题。当人们点击java小程序上的“a”时,我希望它画一个黄色的矩形,如果他们按下其他任何按钮,它会画一个黑色的矩形,但什么也没有发生

    import java.awt.*;
import java.applet.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;

public class guitarGame extends Applet implements ActionListener, KeyListener{

    Timer timer = new Timer (1000, this);
    String s = "";
    char a;
    int selection;

    public void keyReleased(KeyEvent ae){}

    public void keyPressed(KeyEvent ae){}

    public void keyTyped(KeyEvent ae){
        a = ae.getKeyChar();
    }

    public void init(){
        addKeyListener(this);
    }

    public void actionPerformed (ActionEvent ae)
    {
        if (a == a)
        {
            selection = 1;
        }
        else{
            selection = 2;
        }
    }

    public void paint (Graphics g)
    {
        if (selection == 1){
            g.setColor(Color.YELLOW);
            g.fillRect(100,100,100,100);
        }
        if (selection == 2){
            g.setColor(Color.YELLOW);
            g.fillRect(100,100,100,100);
        }
        repaint();
    }
}

有什么帮助吗?

您没有使用
KeyListener
方法执行任何操作。您的
ActionListener
将永远不会被调用,因为它尚未向任何组件注册

public void keyPressed(KeyEvent ae){
   char keyChar = ae.getKeyChar();
   if (keyChar == 'a' ) {
      selection = 1;
   } else {
      selection = 2;
   }

   repaint();
}
一些建议:

  • 不要在
    paint
    内部调用
    repaint
    ——这将导致后者无限循环
  • 使用
    枚举
    而不是幻数进行绘制选择
  • 呼叫super.paint(g)
  • 考虑使用Swing,它比旧的重量级AWT有更好的性能
应该(a==a)是(a==a')?非常感谢!我从Java开始——感谢您提供的提示,小程序现在编译并运行良好