2014-11-20 10 views
0

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

Я просто пытаюсь заставить моего «хорошего парня» перейти на KeyListener и его не получить. Понятия не имею почему.

Вот мой конструктор, который вызывает мой EventListener в моей главной панели:

//monster 1 coordinates 
int mon1x = 0; 
int mon1y = 300; 

KeyListenerAction myKeyActionListener = new KeyListenerAction(); 

public BlobFighterPanel() 
{ 
    addKeyListener(myKeyActionListener); 

    this.setPreferredSize(new Dimension(1300,600)); //set size of main panel 

    //add button 
    startButton.addActionListener(startListener); 
    add(startButton); 
} 

Тогда ниже у меня KeyListener, но его не вызывался:

public class KeyListenerAction implements KeyListener { 

    public void keyPressed (KeyEvent event) 
    { 
     switch(event.getKeyCode()) 
     { 
     case KeyEvent.VK_LEFT: 
      goodx -= 10; 
      break; 
     case KeyEvent.VK_RIGHT: 
      System.out.println("Right"); 
      goodx += 10; 
      break; 
     } 

     repaint(); 
    } 
    public void keyTyped(KeyEvent event){} 
    public void keyReleased(KeyEvent event){} 

} 

Что я делаю неправильно? Почему мой KeyListener не называется?

ответ

3

KeyListener непостоянная хозяйка. Это то, что все внимание все время или не собирается с тобой разговаривать. Что это значит? Для того, чтобы KeyListener поднять события, компонент зарегистрирован, должен иметь фокус и быть фокусируемым ...

Это означает, что в тот момент, когда другой компонент сфокусирован (как кнопка), KeyListener больше не будет отвечать.

Вместо этого вы должны использовать API привязки ключей, который был разработан для решения этой проблемы. См. How to Use Key Bindings для получения более подробной информации.

+0

Я думаю, что это именно то, что мне нужно. Когда я добавил код setFocusable (true); Затем я смог переместить своего «монстра», но после того, как я нажму кнопку «Пуск», фокус переходит к кнопке. Могу ли я настроить фокус на нажатие кнопки на другой панели? – user2788749

+1

Вы можете, но есть лучшее решение ... – MadProgrammer

Смежные вопросы