【发布时间】:2014-02-10 18:23:38
【问题描述】:
我正在向我的程序添加一个帮助菜单,并且我正在尝试找出是否有一种方法可以拦截键盘输入,而无需在 JFrame 上使用 setFocusable 方法。如果我将焦点设置在框架上并按 F1,它就没有问题。当他们按下任何其他组件时,问题就出现了。 Frame 不再处于焦点位置,因此 F1 键不再显示菜单。这是我的做法
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) {}
}
}
【问题讨论】:
-
为什么不像普通程序一样使用
JMenu?您可以使用Actions 将助记符和加速器添加到菜单中。见example -
@peeskillet 这是个好建议。
标签: java swing inner-classes keylistener