【问题标题】:Beginner Java Program-- cannot get key pressed to work初学者 Java 程序 - 无法按下按键来工作
【发布时间】:2013-04-23 18:29:46
【问题描述】:

我刚开始使用 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();
    }
}

有什么帮助吗?

【问题讨论】:

  • 应该 (a==a) 是 (a=='a') 吗?

标签: java applet awt keylistener


【解决方案1】:

你没有用你的KeyListener 方法做任何事情。您的ActionListener 将永远不会被调用,因为它尚未在任何组件中注册。

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

   repaint();
}

一些建议:

  • 不要在 paint 内部调用 repaint - 这将导致后者无限循环
  • 使用enums 而不是幻数来选择油漆。
  • 致电super.paint(g)
  • 考虑使用比旧的重量级 AWT 性能更好的 Swing。

【讨论】:

  • 非常感谢!我从 Java 开始——感谢您的提示,小程序现在可以编译并运行良好
猜你喜欢
  • 2013-06-23
  • 2017-01-01
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 2013-04-23
  • 2022-11-07
  • 1970-01-01
相关资源
最近更新 更多