我正在使用F10作为将数据更新到数据库的快捷方式。每当我按F10 Updates即可正常工作,但是。我的焦点移至菜单栏(该栏包含close,minimize,maximize)仍然可以阻止此操作吗?我知道这是Windows快捷方式。有可能阻止它吗?
最佳答案
您可以尝试从WHEN_IN_FOCUSED_WINDOW
中删除JMenuBar
操作。只需将此行添加到您的代码中:
menuBar.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("F10"), "none");
其中
menuBar
是JMenuBar
组件的引用。希望这可以帮助。
编辑:
确实,如果您不使用
JMenuBar
,上述解决方案将不起作用。另一种解决方案是创建一个空动作并使用它绑定F10
键。 (请参见Key Bindings)。这是一个例子:
//create an empty action which do nothing
Action emptyAction = new AbstractAction(){
public void actionPerformed(ActionEvent e)
{ //do nothing here }};
//bind F10 with the empty action
KeyStroke f10 = KeyStroke.getKeyStroke( "F10");
frame.getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(f10, "F10");
frame.getRootPane().getActionMap().put("F10", emptyAction);
其中
frame
是您的JFrame
组件。