title: Need to have keyListener listening regardless of what focus is on Java
body: <p>Im trying to make a hangman game. Im stuck on trying to listen for the keystroke. I want the user to be able to press a key and it will test to see if it is correct or not. I dont want to have to have it inputted into a text box, regardless of focus I want that key to be tested against the word. Ive tried adding a keylistener to the panel and it doesnt work. The whole thing consists of this panel, a leftpanel, a main panel and then a main frame.</p>
  
  <pre><code>import javax.swing.*;
  import java.awt.*;
  import java.awt.event.*;
  import java.util.*;
  
  public class RightPanel extends JPanel
  {
  JLabel jlbMissed, jlbWord, jlbScore, jlbTimer;
  JComboBox jcbDifficulty;
  JButton jbtStart, jbtQuit;
  String[] difficulties = {"Easy", "Medium", "Hard"};
  String[] words = {"First", "Next", "Hello", "World"};
  char incorrectChar, correctChar;
  String word;
  int currentScore;
  boolean clockIsRunning = false;
  boolean gameInPlay = false;
  int sec = 0;
  int min = 0;
  
  
  
  
  public RightPanel()
  {
  
      this.setLayout(new GridBagLayout());
      GridBagConstraints c = new GridBagConstraints();
      ActionHandler actionHandler = new ActionHandler();
      jlbMissed   = new JLabel("Missed: " + incorrectChar);
      jlbWord     = new JLabel("Word: " + correctChar);
      jlbScore    = new JLabel("Score: " + currentScore);
      jlbTimer    = new JLabel("Time: " + "0:00");
      jbtStart    = new JButton("Start");
      jbtQuit     = new JButton("Quit");
      jcbDifficulty = new JComboBox();
      for (int i = 0; i &lt; 3; i++)
      {
          jcbDifficulty.addItem(difficulties[i]); // Creates Difficutly ComboBox
      }
      this.add(jcbDifficulty, getConstraints(0,0,1,1, GridBagConstraints.NORTH));
      this.add(jlbMissed, getConstraints(0,1,1,1, GridBagConstraints.CENTER));
      this.add(jlbWord, getConstraints(0,2,1,1, GridBagConstraints.CENTER));
      this.add(jlbScore, getConstraints(0,3,1,1, GridBagConstraints.CENTER));
      this.add(jlbTimer, getConstraints(0,4,1,1, GridBagConstraints.CENTER));
      this.add(jbtStart, getConstraints(0,6,1,1, GridBagConstraints.CENTER));
      this.add(jbtQuit, getConstraints(1,6,1,1, GridBagConstraints.CENTER));
      jbtStart.addActionListener(actionHandler);
      jbtQuit.addActionListener(actionHandler);
      Random ran = new Random();  //
      int rand = ran.nextInt(4);  // Generates random number then selects word from words array
      word = words[rand];         //
      KeyListener k = new KeyAdapter()
      {
           public void keyPressed(KeyEvent e) {System.out.println("key was pressed");}
      };
      this.addKeyListener(k);
  
  
  
  
  }
  
  
  
  
  private GridBagConstraints getConstraints(int gridx, int gridy, int gridwidth, int gridheight, int anchor)
  {
      GridBagConstraints c = new GridBagConstraints();
      c.insets = new Insets(5,5,5,5);
      c.ipadx = 0;
      c.ipady = 0;
      c.gridx = gridx;
      c.gridy = gridy;
      c.gridwidth = gridwidth;
      c.gridheight = gridheight;
      c.anchor = anchor;
      return c;
  }
  
  class ActionHandler implements ActionListener
    {
  public void actionPerformed(ActionEvent e)
  {
      Object source = e.getSource();
      if (source == jbtStart)
      {
          clockIsRunning = true;
          MyTimer timer = new MyTimer();
          timer.start();
          gameInPlay = true;
      }
      else if (source == jbtQuit)
      {
          System.exit(0);
          }
  
  }
    }
    class MyTimer extends Thread
    {
  public void run()
  {
      while(true)
      {
          if(!clockIsRunning)
              break;
          try
          {
              Thread.sleep(1000);
          }
          catch (InterruptedException ecp)
          {
          }
  
          if (sec == 59)
          {
              min++;
              sec = 0;
          }
          else
              sec++;
          if(sec &lt; 10)
              jlbTimer.setText("Time:" + min+":0"+sec);
          else
              jlbTimer.setText("Time:" + min+":"+sec);
      }
  }
    }
  </code></pre>