I'm adding a Help Menu to my program and I'm trying to figure out if there's a way to intercept keyboard input without having to use the setFocusable method on the JFrame. It works no problem if I set the focus to the frame and press F1. The problem comes in when they press on any other component. The Frame is no longer in focus, so the F1 key no longer displays the menu. Here is how I did it
package helpmenu;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
public class HelpMenu extends JFrame
{
public HelpMenu()
{
setSize(300, 300);
setTitle("Help Menu");
}
/**
* Sets a KeyListener to
* the passed in JFrame.
* @param mainFrame
*/
public void callMenu( JFrame mainFrame )
{
mainFrame.addKeyListener( new functionListener() ); //Set keylistener to the main frame.
mainFrame.setFocusable(true); //Put the main frame into focus.
}
/**
* Inner KeyListener
* class for the mainFrame
* @author Shaun
*/
class functionListener implements KeyListener
{
@Override
public void keyPressed(KeyEvent e)
{
//Check if the F1 key was pressed
if ( e.getKeyCode() == KeyEvent.VK_F1 ) {
setVisible(true);
}
}
@Override
public void keyReleased(KeyEvent e) {}
@Override
public void keyTyped(KeyEvent e) {}
}
}