栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在我的SWT应用程序中检测ctrl-f

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在我的SWT应用程序中检测ctrl-f

Is Display.addFilter(...) the best way to add a glbal shortcut? I triedDisplay.addListener(...) but this didn't receive any events at all.

是的,通常

Display.addFilter(...)
是添加全局快捷方式的最佳方法,因为它们比事件侦听器具有更高的优先级。请参见
Display.addFilter(...)
javadoc中的以下注释。

因为事件过滤器在其他侦听器之前运行,所以事件过滤器既可以阻止其他侦听器,又可以在事件内设置任意字段。因此,事件过滤器既强大又危险。出于性能,调试和代码维护的原因,通常应避免使用它们。


对于第二个问题:

Why don't I get the pressed character when I'm holding down ctrl? When Ihold down alt or shift I get the expected mask and the pressed character.

问题是您在看错地方。而不是查询,

e.character
您应该使用
e.keyCode
。根据
e.character
您的javadoc,您将不会只得到字符
f

根据事件,由键入的键表示的字符。这是在应用所有修饰符后得出的最终字符。例如,当用户键入Ctrl + A时,字符值为0x01(ASCII SOH)。

因此,当您按

CTRL
+时,
f
它将转换为
0x06
(ASCII ACK)。当您使用
ALT
+
f
SHIFT
+
时,情况并非如此
f

另一方面,javadoc

e.keyCode
表示:

根据事件,所键入的密钥的密钥代码,由类SWT中的密钥代码常量定义。当事件的字符字段不明确时,该字段将包含原始字符的不受影响的值。例如,键入Ctrl +
M或Enter都输入字符’ r’,但键入Enter时keyCode字段也将包含’ r’,而键入Ctrl + M时keyCode字段还将包含’m’。

检查下面的代码以获取更多详细信息。对于演示,我尝试将监听器置于

Display
Test

import org.eclipse.swt.SWT;import org.eclipse.swt.events.KeyEvent;import org.eclipse.swt.events.KeyListener;import org.eclipse.swt.graphics.Color;import org.eclipse.swt.widgets.Display;import org.eclipse.swt.widgets.Event;import org.eclipse.swt.widgets.Listener;import org.eclipse.swt.widgets.Shell;public class ControlF {    public static void main(String[] args)     {        Display display = new Display ();        final Shell shell = new Shell (display);        final Color green = display.getSystemColor (SWT.COLOR_GREEN);        final Color orig = shell.getBackground();        display.addFilter(SWT.KeyDown, new Listener() { public void handleEvent(Event e) {     if(((e.stateMask & SWT.CTRL) == SWT.CTRL) && (e.keyCode == 'f'))     {         System.out.println("From Display I am the Key down !!" + e.keyCode);     } }        });        shell.addKeyListener(new KeyListener() { public void keyReleased(KeyEvent e) {     if(((e.stateMask & SWT.CTRL) == SWT.CTRL) && (e.keyCode == 'f'))     {         shell.setBackground(orig);         System.out.println("Key up !!");     } } public void keyPressed(KeyEvent e) {     if(((e.stateMask & SWT.CTRL) == SWT.CTRL) && (e.keyCode == 'f'))     {         shell.setBackground(green);         System.out.println("Key down !!");     } }        });        shell.setSize (200, 200);        shell.open ();        while (!shell.isDisposed()) { if (!display.readAndDispatch ()) display.sleep ();        }        display.dispose ();    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/469831.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号