Java keylistener и действие на объекте, что не так? - PullRequest
0 голосов
/ 22 августа 2010

Вот мой код, я пытаюсь переместить этот прямоугольник нажатием клавиши.Вопросы - как мне указать его на клавишах со стрелками и почему он не позволяет мне работать таким образом?Он подчеркивает

мой объект весла красным в событии 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);


}

Ответы [ 4 ]

0 голосов
/ 18 июля 2016

На данный момент я вижу две проблемы:

  1. В вашей программе прямо сейчас есть несбалансированные фигурные скобки, поэтому вам, вероятно, следует добавить одну в конец метода keyPressed.

  2. Вы не обновляете прямоугольник, поэтому вам понадобится какой-то цикл.

0 голосов
/ 22 августа 2010

Понятия не имею, что такое пакеты ACM, и понятия не имею, что такое класс GrphaicsProgram, поэтому я не совсем понимаю, что вы делаете.

Но, как правило, KeyEvents передаются только объекту, который имеет фокус. Я не могу сказать, имеет ли фокус ваш объект весла или нет.

Я бы посоветовал вам написать свою программу, используя Swing, а затем воспользоваться Key Bindings вместо того, чтобы полагаться на KeyEvents.

0 голосов
/ 05 сентября 2013

попробуйте это:

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

}
0 голосов
/ 22 августа 2010

paddle - локальная переменная в методе run().Он недоступен из метода keyPressed(KeyEvent e).

Возможно, вы захотите превратить весло в поле.

...