【发布时间】:2015-05-21 19:40:20
【问题描述】:
编写一个聊天应用程序,我希望用户能够从他/她的剪贴板中发送图像。为此,我想捕捉任何CTRL+Vkeyboard 输入。由于默认情况下应该可以粘贴文本,因此必须不覆盖原始 ctrl+v 功能(粘贴文本)。
我看到有两种方法,其中没有一种适合我:
第一个:取自official Java documentation:KEY LISTENER
editorPane.addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent e) {
e.getKeyChar()
// when I press ctrl+v, ^ this is falsely a white square character, looks like (U+25A1). Plain v without ctrl does work.
e.getKeyCode()
// ^ this is falsely 0
// (e.getModifiersEx() correctly returns InputEvent.CTRL_DOWN_MASK)
}
第二个:键绑定
InputMap iMap = editorPane.getInputMap(condition);
ActionMap aMap = editorPane.getActionMap();
iMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_DOWN_MASK), "ctrlV");
aMap.put("ctrlV", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
// works, but overrides natural ctrl+v function!
}
});
有什么想法吗?
注意:我使用的是“外国”键盘布局(德语)。但我不明白为什么这会产生任何影响 - 我非常希望我的应用程序能够在国际范围内工作。
干杯
编辑。 Alt+SomeKey 但是被 KeyListener 正确识别
编辑2。将键盘布局更改为美国后,问题仍然存在。
【问题讨论】:
-
还没有测试过,很久没写swing代码了,但是一件事就是尝试做aMap.get来获取当前的处理程序。如果这可行,那么您的新处理程序可以委托并执行额外的处理。只是一个想法......
标签: java swing keylistener key-bindings ctrl