我正在使用F10作为将数据更新到数据库的快捷方式。每当我按F10 Updates即可正常工作,但是。我的焦点移至菜单栏(该栏包含close,minimize,maximize)仍然可以阻止此操作吗?我知道这是Windows快捷方式。有可能阻止它吗?

最佳答案

您可以尝试从WHEN_IN_FOCUSED_WINDOW中删除​​JMenuBar操作。只需将此行添加到您的代码中:

menuBar.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("F10"), "none");


其中menuBarJMenuBar组件的引用。

希望这可以帮助。

编辑:

确实,如果您不使用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组件。

09-25 21:04