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。
提前致谢:)
答案 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
}