title: Why won't the keyPressed method be called?
body: <p>I'm making a fighting game in Java for a project and trying to get a picture to move and be repainted across the panel reacting to the keyboard (keyEvents).  I'm trying to accomplish this by having a switch in the keyPressed method, while adding the keyListener to the panel. I have been following an example in my Java book and the code I've written as nearly the same yet it just won't work.</p>
  
  <p>What I'm really wondering is why it doesnt seem to react to keyEvents at all. The program compiles fine and all, yet nothing happens. I have no idea what is going wrong. It doesn't reach the breakpoint in the <code>keyPressed()</code> method if I make one, nor will it it do a <code>println()</code> if I put it in there. So the <code>keyPressed()</code> method doesnt react at all. I have also tested and made sure that the panel is focusable so I'm sure it has the keyboard focus.</p>
  
  <pre><code>public class MovePanel extends JPanel implements KeyListener {
      private ImageIcon currentImage, facingLeft, facingRight;
      private int position;
      private final int MOVEMENT;
      private GameFrame gameFrame;
      private URL lefturl, righturl;
  
      public MovePanel(GameFrame gameFrame) {
          // Taking in a gameFrame to be able to swap the active panel 
          // (not really relevant).
          this.gameFrame = gameFrame;
  
          // Adding the key listener here.
          addKeyListener(this);
  
          // These are just the Images I'm using to test. 
          // Trying to get it to swap from one to the other.
      lefturl = getClass().getResource("/Images/facingLeft.jpg");
      righturl = getClass().getResource("/Images/facingRight.jpg");
  
      facingLeft = new ImageIcon(lefturl);
      facingRight = new ImageIcon(righturl);
  
      currentImage = facingLeft;
      position = 50;
      MOVEMENT = 30;
  
      setBackground(Color.red);
      setPreferredSize(new Dimension(600,300));
  
          // Calling this method so that the panel will react 
          // to the keyboard without having to be clicked.
      setFocusable(true);
      }
  
      // This is just the paintComponent method which works fine to paint the image
      // when starting the game.
      public void paintComponent(Graphics page) {
      super.paintComponent(page);
      currentImage.paintIcon(this, page, position, 170);
      }
  
      // No matter what I try to do inside the keyPressed method
      // it doesnt seem to react at all.
      public void keyPressed(KeyEvent e) {
  
          // This switch is to make the method react accordingly to the keys pressed.
          switch (e.getKeyCode()) {
          case KeyEvent.VK_LEFT: 
  
              // Here I'm changing the "active" image and the position 
              // by changing the position variable which is used 
              // to determine the x placement of the image.
              // This case is suppused to react if the left arrow key is pressed.
              currentImage = facingRight;
              position -= MOVEMENT;
              break; 
          case KeyEvent.VK_RIGHT: 
              currentImage = facingRight;
              position += MOVEMENT;
              break; 
  
          // This case is to exit to the menu when escape is pressed.
          case KeyEvent.VK_ESCAPE: 
              gameFrame.setMenuPanelActive();
              break; 
          }
          // After reacting to any of the proper keys pressed 
          // I'm trying to repaint which will use the
          // paintComponent method to paint the new image in its new position.
          repaint();
      }
      // I have empty definitions for the other 
      // implemented methods but won't be posting them.
  }
  </code></pre>
  
  <p>Does anyone have any idea why this doesn't work? Why <code>keyPressed()</code> method won't react?</p>