2013-04-29 45 views
0

我刚开始使用Java,我有一个问题。当人们点击java applet上的“a”时,我想让它画一个黄色的矩形,如果他们按下其他任何东西,它会画出一个黑色的矩形,但没有任何反应。初学Java程序 - 无法让按键工作

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(); 
    } 
} 

任何帮助?

+1

emm ..(a == a)?? – 2013-04-29 23:09:58

+0

应该(a == a)是(a =='a')吗? – Hayden 2013-04-29 23:11:56

回答

1

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

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

    repaint(); 
} 

几点建议:

  • 不要叫repaintpaint - 这将导致后者的无限循环
  • 使用enums而不是幻数油漆选择。
  • 请致电super.paint(g)
  • 考虑使用Swing,它比旧的重量级AWT有更好的性能。
+0

非常感谢!我从Java开始 - 感谢你的提示,现在applet编译并运行正常 – user2333960 2013-04-30 01:41:53