【发布时间】:2017-08-09 08:35:56
【问题描述】:
我想在 SWT 中全局监听 CTRL + v。我可以成功收听 CTRL + c 但粘贴在 SWT 中的处理方式似乎有所不同。以下Listener 显示了它如何用于复制以及如何不适用于粘贴:
display.addFilter(SWT.KeyDown, new Listener() {
private final int CTRL = SWT.MOD1;
private boolean checkNextEventForPaste = false;
@Override
public void handleEvent(Event event) {
if(event.stateMask == CTRL && event.keyCode == 'c'){
System.out.println("copy: this works!");
}
else if(event.stateMask == CTRL && (event.keyCode == 'v'
|| event.keyCode == 'V'
|| event.keyCode == 0x16
|| event.keyCode == 118)){
System.out.println("paste: does not work!");
}
else if (event.keyCode == CTRL){
//control for paste is fired first
checkNextEventForPaste = true;
}
else if(checkNextEventForPaste){
if(event.keyCode == 65536){
System.out.println("custom solution: seems to not only apply for paste");
}
checkNextEventForPaste = false;
}
}
});
我调试了粘贴案例并创建了一个自定义解决方案。粘贴键盘快捷键创建以下事件序列:
- 首先是
event和stateMask = 0和keyCode = CTRL - 第二个
event与stateMask = 0和keyCode = 65536
问题在于自定义粘贴解决方案似乎也适用于其他快捷方式。例如,复制快捷方式创建以下事件序列:
- 首先是
event和stateMask = 0和keyCode = CTRL - 第二个
event与stateMask = CTRL和keyCode = 'c' - 第三个
event和stateMask = 0和keyCode = 65536
为什么 SWT 以不同的方式处理粘贴快捷方式?粘贴快捷方式是否可能已被其他控件使用?或者有人知道我如何识别粘贴快捷方式吗? VerifyListener 不适用于我的用例。我已经使用自定义选择实现了一个或多或少复杂的 UI,如您所见 here。
【问题讨论】:
标签: java swt copy-paste keydown ctrl