2013-07-16 2 views
3

У меня есть этот код:KeyListener не доходя до моего переключателя заявления

import java.awt.Color; 
    import java.awt.Graphics; 
    import java.awt.event.KeyEvent; 
    import java.awt.event.KeyListener; 
    import java.awt.event.MouseEvent; 
    import java.awt.event.MouseListener; 

    import javax.swing.JApplet; 


    public class applet extends JApplet implements KeyListener, MouseListener{ 
     int a = 0; 
     int b = 0; 
     public void init(){ 
      setSize(500,500); 
      addKeyListener(this); 
      addMouseListener(this); 
     } 
     public void paint(Graphics g){ 
      g.setColor(Color.BLUE); 
      g.fillRect(a, b, 400, 400); 
     } 
     @Override 
     public void keyPressed(KeyEvent e) { 
     System.out.println("Hello!")  
switch(e.getKeyCode()){ 
       case KeyEvent.VK_DOWN: a -= 5; 
       break; 
       case KeyEvent.VK_UP: a += 5; 
       break; 
       case KeyEvent.VK_RIGHT: b += 5; 
       break; 
       case KeyEvent.VK_LEFT: b -= 5; 
       break; 
      } 
      repaint(); 
     } 
     @Override 
     public void keyReleased(KeyEvent e) { 
      // TODO Auto-generated method stub 

     } 
     @Override 
     public void keyTyped(KeyEvent e) { 
      // TODO Auto-generated method stub 

     } 
     @Override 
     public void mouseClicked(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 
     @Override 
     public void mouseEntered(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 
     @Override 
     public void mouseExited(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 
     @Override 
     public void mousePressed(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 
     @Override 
     public void mouseReleased(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 
    } 

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

+0

http://stackoverflow.com/questions/13595208/applet-keylistener-not-working?rq=1 –

+0

также 1- Избегайте переопределение 'paint' контейнеров верхнего уровня, вместо того, чтобы использовать что-то вроде 'JPanel' и переопределить его метод' paintComponent' и добавить это к апплету и 2- Убедитесь, что вы вызываете 'super.paintXxx' – MadProgrammer

+1

См. [Движение с помощью клавиатуры] (http://tips4java.wordpress.com/2013/06/09/motion-using-the-keyboard /) для проблем с использованием KeyListener и примерного решения с использованием клавишных привязок. – camickr

ответ

6

KeyListener будет запускать только события, если зарегистрированный компонент является фокусируемым и имеет фокус.

JApplet имеет JRootPane, который добавляет панель с JLayeredPane и контента (среди прочего) наверх апплета, что может означать, что ключевой слушатель никогда не может быть в состоянии начать получать уведомления о событиях (как и другие элементы блокируют его).

Вместо этого следует использовать Key Bindings

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