我有一个扩展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(),但没有成功。
我错过了什么?
答案 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});