2014-10-07 62 views
1

是否可以发布一个Key事件,其中包含该字符,因为它应该由焦点小工具接收?如何发布仅包含键盘字符(无修饰符)的SWT键事件?

我想制作一个简单的弹出式键盘,它会生成Key事件,我想使弹出式键盘完全独立于键盘映射的物理键盘。我现在看到的是,当我将字符设置为'('而没有生成移位事件时,我得到一个'8'(我有一个德国键盘,其中'('是Shift + 8)不同的键盘上“(”将别人再次出现的东西

有什么办法来绕过映射

我当前的代码:?

private void postKey(Key key) { 
    if(shift) { 
     Event ke = new Event(); 
     ke.type = SWT.KeyDown; 
     ke.keyCode = SWT.SHIFT; 
     refWidget.getDisplay().post(ke); 
    } 

    Event ke = new Event(); 
    ke.type = SWT.KeyDown; 
    ke.character = shift ? key.shifted[0] : key.normal[0]; 
    refWidget.getDisplay().post(ke); 

    ke.type = SWT.KeyUp; 
    refWidget.getDisplay().post(ke); 

    if(shift) { 
     Event ev = new Event(); 
     ev.type = SWT.KeyUp; 
     ev.keyCode = SWT.SHIFT; 
     refWidget.getDisplay().post(ev); 
    } 
} 

回答

2

的了SWTBot wiki有一个keyboard layouts

如果你坚持使用Display-post(),那么你需要知道当前的键盘布局,并将键映射到字符(shift + 8 - >'('),就像你已经观察到的那样。 您可以重复使用或采用SWTBot的相关课程(SWTKeyboardStrategy,KeyboardLayout)。

作为一种替代方案,页面列出AWTKeyboardStrategy,它使用AWT Robot来模拟击键,这可能值得尝试。

作为一个方面说明:如果你有张贴Shift + X键时,你会指定要在stateMask像这样的Shift键:

Event ev = new Event(); 
    ev.type = SWT.KeyUp; 
    ev.stateMask = SWT.SHIFT; 
    ev.keyCode = ... 
+0

在仔细看我的第一个答案只适用于'StyledText '。请参阅修订版本。 – 2014-10-07 14:09:22

+0

+1 - 感谢您的信息。我曾希望它会更简单:-)我会看看SWTBot页面... – paul 2014-10-08 05:24:26