当前位置: 首页 > 面试题库 >

SWT全局KeyListener按钮焦点问题

方高丽
2023-03-14
问题内容

对于我的应用程序,我需要空格键才能在应用程序中的任何位置(但仅在根据选项卡打开的情况下)调用独立于焦点小部件的函数。我发现可以向显示添加过滤器,如下所示:

 getShell().getDisplay().addFilter(SWT.KeyDown, new Listener() {

            public void handleEvent(Event arg0) {
                if( arg0.character == 32 ) { /**SPACE*/
                    if( mainTabs.getSelection().equals(analyseSoundFilesTab)) {
                        soundController.playButtonClickHandler();
                    }
                }
            }

        });

在大多数情况下,这种方法都能正常工作,但是如果我通过“选项卡”或“移位选项卡”为按钮提供焦点,则有点奇怪-
空格键将激活“按下的按钮”,就好像单击该按钮时鼠标。我现在有点卡住了,我不知道该如何避免…对于按钮,我已经实现了SelectionListener。

问候。


问题答案:

您可以使用doin字段使用TraverseListener和禁用的新闻事件检测。这是一个示例代码:

display.addFilter(SWT.KeyDown, new Listener() {
    public void handleEvent(Event e) {
        if (e.character == 32) {
            System.out.printf("Space detected %s\n", e);
        }
    }
});

Button b1 = new Button(shell, SWT.PUSH);
b1.addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(SelectionEvent se) {
        System.out.printf("Button pressed %s\n", se);
    }
});

b1.addTraverseListener(new TraverseListener() {
    @Override
    public void keyTraversed(TraverseEvent te) {
        System.out.printf("Traverse detected %s\n", te);
        te.doit = true;
    }
});

如果addTraverseListener()不存在,则在过滤器之后检测到您的空格按钮,因此您将看到“已检测到空格…”以及该“按钮被按下…”之后。设置好之后te.doit = true,您要对SWT进行空格键遍历(实际上不执行任何操作),而不是触发键侦听器。您可以选择检查te.detail以仅防止助记符遍历。



 类似资料:
  • 问题内容: 我正在计划在Windows下运行的Java程序的计划制定工作,该程序可以在背景的不同键runnig上映射不同的“宏”。问题是- 如何使Java在应用程序未聚焦时监听按键。 我发现很多观点认为这是不可能的。但是我也发现Stefano在SO上写的这本书。这种解决方案对我来说还不够好,至少没有一个重要的信息。如果没有按下该键,该函数将返回一个值。按键后,它会返回不同的值…如果函数在按键事件后

  • 我有一个带有EditText和按钮的活动。当用户单击EditText时,会显示键盘,他可以输入一些Text-很好。但是当用户单击按钮时,我希望EditText不再对焦,即键盘隐藏,直到用户再次单击EditText。 单击按钮后,如何“隐藏EditText的焦点”。我可以在按钮的OnClick方法中添加一些代码来实现这一点? 编辑: 顺致敬意,

  • 我的对话框是扩展TitleArea对话框。在对话框上,我有一个关闭对话框按钮。它基本上只是调用方法关闭();当按钮被单击时。 我遇到的问题是,当用户单击窗口关闭(红色X)时,它调用的不是关闭方法。我认为这可能是调用Cancel方法。 检查returnCode,我看到当按下close时,它返回0。但当按下X时,返回1。 如何覆盖X键,只调用关闭方法,如按钮按下?

  • 我有一个关于右上角红色按钮关闭应用程序(Windows 7)的快速问题...我在Java中编程了ServerSocket,但当我使用此关闭按钮关闭应用程序时,服务器会继续运行...我想捕获此事件(如果可能),并确保当按下此按钮时,包括ServerSocket在内的整个程序都已关闭。 这是一段代码,我认为我必须修改以捕捉这一事件。。。 任何帮助都将不胜感激。。。谢谢

  • 问题:我想更改输入元素焦点上按钮的样式。 下面是模板代码: 以下是css代码: 预期输出:在输入框 1的焦点上。将1倍宽度的边框应用于输入框 2。更改按钮的背景颜色 实际输出: 1。边框应用于输入框 2。按钮的背景色没有变化 http://jsfiddle.net/6Y8GL/7/

  • 页面上有两个按钮,当你点击其中一个时,它会改变颜色。 如何让这个焦点点击旁边的空字段后不会消失?