如何在窗口(显示窗口菜单)中禁用F10默认操作?

时间:2014-08-26 09:07:14

标签: java swing key-bindings

F10 的默认操作是显示窗口的菜单。 但是,我想禁用此功能。

更新: 背景:如果用户按任意键,我想在JTextField中实现一个特殊的行为。不幸的是,当按下 F10 时,JTextField不会获取该事件,因为它被窗口捕获(并显示菜单)。

有谁知道如何在窗口中禁用此键绑定?

我尝试在根窗格中禁用它但没有成功:

frame.getRootPane().getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_F10, 0), "none");

我搜索了很多但没找到解决这个问题的方法。也许你们其中一个人知道答案。

UPDATE2 这是一个重现此行为的代码示例:

public static void main(final String[] args) {
SwingUtilities.invokeLater(new Runnable() {

  @Override
  public void run() {
    JFrame.setDefaultLookAndFeelDecorated(true);

    final JTextField edit = new JTextField();
    edit.setEditable(false);
    edit.addKeyListener(new KeyAdapter() {

      @Override
      public void keyReleased(final KeyEvent ke) {
        edit.setText(KeyEvent.getKeyText(ke.getKeyCode()));
      }
    });

    final JFrame frame = new JFrame("DEMO");
    frame.setSize(320, 240);
    frame.getContentPane().add(edit);
    frame.setVisible(true);
  }
});

}

Plase note:根据" setDefaultLookAndFeelDecorated"是否存在不同的行为。设置为true或false。

提前致谢:)

2 个答案:

答案 0 :(得分:4)

  

我尝试在根窗格中禁用它但没有成功:

查看Key Bindings以了解所有Swing组件的绑定。

您将看到 F10 键绑定到JMenuBar。所以你应该可以使用:

menuBar.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F10, 0), "none");

编辑:

错过了你没有菜单栏的观点。

您似乎无法将绑定设置为" none"。看起来Swing仍在搜索树以找到要执行的Action。你需要提供一个什么都不做的虚拟动作:

Action action = new AbstractAction()
{
    public void actionPerformed(ActionEvent e)
    {
        System.out.println("do nothing");
    }
};

JPanel content = (JPanel)frame.getContentPane();
String key = "F10";
KeyStroke f10 = KeyStroke.getKeyStroke( key );
frame.getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(f10, key);
frame.getRootPane().getActionMap().put(key, action);

答案 1 :(得分:0)

如果我理解正确,请在netbeans上为您的JTextField创建Keypress事件,并将其放入以下代码

private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {                                       

   // Add below
       int key = evt.getKeyCode(); 

           if (evt.getSource() == jTextField1)
           {
               if (key == KeyEvent.VK_F10)
               {
                  // your actions here
                   System.out.println("Hello I am f10");

               }

           }
         //   end of if

        }