我有一个自定义文本字段类,它扩展了 Swing 中的 JTextField 类。
我需要找到一种方法来禁用 Ctrl-A(全选)、Ctrl-H(退格)等的默认操作,以便包含文本字段的窗口可以将这些快捷方式映射到它想要的任何内容。
任何帮助将不胜感激。
我有一个自定义文本字段类,它扩展了 Swing 中的 JTextField 类。
我需要找到一种方法来禁用 Ctrl-A(全选)、Ctrl-H(退格)等的默认操作,以便包含文本字段的窗口可以将这些快捷方式映射到它想要的任何内容。
任何帮助将不胜感激。
好的,我自己找到了答案:
在 textfield 类的初始化方法中添加了以下内容:
this.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_MASK), "none");
效果是文本字段忽略快捷方式并让击键传递给窗口中的快捷方式处理程序。
如何制作和删除键绑定将帮助您实施。
要删除所有默认键绑定,只需取消引用其父 InputMap。
jtextField.getInputMap().setParent(null);
但它删除了所有键绑定,因此您无法键入任何字符。JTextField 的输入有 3 个父项。所以你会更好地覆盖下面的特定键绑定。
InputMap inputMap = jtextfield.getInputMap();
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_A, Key_Event.CTRL_DOWN_MASK), "foo");
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_A, Key_Event.META_DOWN_MASK), "foo");
也许你应该处理KeyMap。