【问题标题】:Java keylistener and action on object, what's wrong?Java keylistener 和对对象的操作,有什么问题?
【发布时间】:2011-04-02 08:19:57
【问题描述】:

这是我的代码,我想做的是通过按键移动该矩形。问题 - 我如何在箭头键上指定它以及为什么它不允许我那样工作?它强调了

我的桨对象在 KeyPressed 事件中显示为红色并且不会运行。

import acm.graphics.*;
import acm.program.*;
import java.awt.event.*;
public class BreakOut extends GraphicsProgram {
/** Runs the program */
public void run() {

 GRect paddle = new GRect(200, 400, 100, 20);
 add(paddle);

 addKeyListeners();

}
public void keyPressed(KeyEvent e){
 paddle.move(5,0);


}

【问题讨论】:

  • 这甚至不会编译,更不用说运行了

标签: java awt keylistener


【解决方案1】:

paddle 是run() 方法中的一个局部变量。无法通过keyPressed(KeyEvent e) 方法访问它。

你可能想把桨变成一个田野。

【讨论】:

    【解决方案2】:

    我不知道 ACM 包是关于什么的,也不知道 GrphaicsProgram 类是什么,所以我真的不知道你在做什么。

    但是,一般来说,KeyEvents 只传递给具有焦点的对象。我不知道你的桨对象是否有焦点。

    我建议您可以使用 Swing 编写程序,然后利用 Key Bindings 而不是依赖 KeyEvents。

    【讨论】:

      【解决方案3】:

      试试这个:

      import acm.graphics.*;
      import acm.program.*; 
      import java.awt.event.*;
      
      public class BreakOut extends GraphicsProgram {
      
          GRect paddle;
      
          public void run() {
      
            paddle = new GRect(200, 400, 100, 20);
            add(paddle);
      
            addKeyListeners();
      
          }
      
          public void keyPressed(KeyEvent e){
             paddle.move(5,0);
          }
      
      }
      

      【讨论】:

        【解决方案4】:

        到目前为止,我可以看到两个问题:

        1. 您的程序现在有不平衡的花括号,因此您应该在 keyPressed 方法的末尾添加一个。

        2. 您没有更新矩形,因此您需要某种循环。

        【讨论】:

        • 欢迎来到 StackOverflow。请尝试通过添加一些示例来改进您的答案。也许大括号的问题只是他忘记复制 las 大括号,所以也许不是那么相关,也许一个通知就足够了。至于你发现解决方案是循环的主要问题,请尽量清晰,以帮助提问者更好地理解你提出的解决方案。
        猜你喜欢
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 2018-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多