gpt4 book ai didi

java - 如何在 SWT 中监听粘贴键盘快捷键

转载 作者:行者123 更新时间:2023-12-01 08:45:30 27 4
gpt4 key购买 nike

我想在 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;
}
}

});

我调试了粘贴案例并创建了一个自定义解决方案。粘贴键盘快捷键创建以下事件序列:

  • 第一个 事件,其中 stateMask = 0keyCode = CTRL
  • 第二个事件,其中stateMask = 0keyCode = 65536

问题是自定义粘贴解决方案似乎也适用于其他快捷方式。例如,复制快捷方式创建以下事件序列:

  • 第一个 事件,其中 stateMask = 0keyCode = CTRL
  • 第二个事件,其中stateMask = CTRLkeyCode = 'c'
  • 第三个事件,其中stateMask = 0keyCode = 65536

为什么 SWT 以不同的方式处理粘贴快捷方式?粘贴快捷方式是否可能已被其他控件占用?或者有人知道我如何识别粘贴快捷方式? VerifyListener 不适用于我的用例。我已经通过自定义选择实现了或多或少复杂的 UI,如您所见 here .

最佳答案

下面的代码适用于 Ctrl+cCtrl+v

public static void main(String[] args)
{
final Display d = new Display();
Shell s = new Shell(d);

d.addFilter(SWT.KeyDown, e ->
{
if (((e.stateMask & SWT.CTRL) == SWT.CTRL) && (e.keyCode == 'c'))
{
System.out.println("copy");
}
else if (((e.stateMask & SWT.CTRL) == SWT.CTRL) && (e.keyCode == 'v'))
{
System.out.println("paste");
}
});

s.pack();
s.open();

while (!s.isDisposed())
{
if (!d.readAndDispatch())
d.sleep();
}
d.dispose();
}

关于java - 如何在 SWT 中监听粘贴键盘快捷键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45585574/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com