为什么我不能删除此JTextField默认密钥绑定?

时间:2012-08-10 22:00:52

标签: java swing

我有一个扩展JTextField的类,我想让CTRL-Shift-O做一些事情。我一直在听

JTextFieldExtension.addKeyListener(new KeyAdapter() {

public void keyReleased(KeyEvent e)
{
}

}

在e.isControlDown()和e.isShiftDown()的帮助下,这很好用。但是我注意到场上的文字也从左边移动到右边。显然,这是JTextField的默认行为。所以我在SO上发现这个帖子看起来很有帮助:

How to disable default textfield shortcuts in JTextField

从该线程调用 jtextField.getInputMap()。setParent(null); 确实停用了该行为。但它也摆脱了我仍想保留的Ctrl-C和其他有用的映射。所以我尝试了建议的方法只删除KeyStroke“ctrl shift O”。但它们似乎都不起作用。

目前在类的构造函数中,我有以下内容:

     this.getInputMap().put(KeyStroke.getKeyStroke("shift ctrl pressed O"), null);
     KeyStroke[] strokes = this.getInputMap().allKeys();
     for (KeyStroke ks : strokes)
     {
        System.out.println(ks.toString());
     } 

尽管System.out.Println显示“shift ctrl pressed O”作为其列出的allKeys之一,但它不起作用。我也试过调用InputMap.remove而不是Put(),但没有成功。

我错过了什么?

2 个答案:

答案 0 :(得分:3)

在这种情况下,从输入映射中删除键似乎没有像我期望的那样工作,但是您可以覆盖已安装的操作以有效地禁用“切换组件方向”。在Swing中,输入映射将键击映射到对象(通常是字符串),这些对象用作操作映射的标识符,后者再次保存相应的操作。因此,禁用ctrl + shift + O的简单方法如下:

myComponent.getInputMap().put(KeyStroke.getKeyStroke("shift ctrl pressed O"), "Nothing");

这只是将击键重新映射到动作图中未包含的内容(字符串“Nothing”,也可能是“Foo”),因此按ctrl + shift + O时没有任何反应。

编辑:我可以看到这是在您链接的主题中提出的。但是,我确认上述代码适用于文本字段。如果不适合您,请在您的代码中提供一个简短的呼叫示例。

答案 1 :(得分:0)

所有默认绑定都列在组件的InputMap中。我只是想表明另一种方法,这可能会更好,因为一个人正在努力实现:

        myTextComponent.getActionMap().put("toggle-componentOrientation", myAction});