java - 初级Java程序--无法按下按键来工作

标签 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 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 - 这将导致后者无限循环
  • 使用枚举而不是魔数(Magic Number)来选择绘画。
  • 调用super.paint(g)
  • 考虑使用 Swing,它比旧的重量级 AWT 具有更好的性能。

关于java - 初级Java程序--无法按下按键来工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16289682/

相关文章:

java - 自定义列表上的二进制搜索 - android

java - 我有一个代码。它工作正常,直到我在其中添加了一个额外的方法

java - 更改 AWT TextField 的边框颜色

java - 我在从 Java 中的方法返回列表时遇到问题

java - Java 的 Set 是否实现了 UnionFind 算法?

java - 在 Java Applet 中导入图像

java - 客户端套接字创建在 jdk1.8.0_25 上挂起

java - 如何刷新 Java 小程序?

Java 小程序 : Playing Music Fails

java - Katharsis 2.8.2 升级问题