为什么使用键盘完成选择后未触发选择事件?

问题描述

我有使用SWT的Eclipse RCP应用程序。这是示例代码。

    Combo combo = new Combo(shell,SWT.NONE);
    combo.setItems(items); // items is a String[]
    combo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,false));

    combo.addSelectionListener(new SelectionAdapter() {
         
        @Override
        public void widgetDefaultSelected(SelectionEvent e) {
            System.out.println("In widgetDefaultSelected");
        }

        @Override
        public void widgetSelected(SelectionEvent e) {
            System.out.println("In widgetSelected");
        }
    }); 

该组合已在代码中设置为自动完成。应该为鼠标或键盘事件触发选择事件。使用鼠标进行的选择会触发选择事件,但是使用键盘进行的选择则不会。我想知道为什么。

我的日食不是最新的,它的版本是3.6.2,它附带的是swt JAR。我将不胜感激。

解决方法

由于选择事件不是通过键盘触发的,因此我向组合小部件添加了KeyListener,并检查用户是否按下了Enter键。

    combo.addKeyListener(new KeyListener() {

        @Override
        public void keyPressed(KeyEvent e) {

        }

        @Override
        public void keyReleased(KeyEvent e) {
            if (e.keyCode==SWT.CR || e.keyCode==SWT.KEYPAD_CR) { // Enter key
                Combo c = (Combo) e.getSource();
                System.out.println(c.getText());
                // Do rest of processing
            }
        }
    });

似乎我正在从列表框中移出所选项目。到目前为止,看来一切正常。

,

选择事件不用于键盘事件,Combo#addSelectionListener的Javadoc在这里非常清楚:

    当用户更改组合的列表选择时,会调用
  • widgetSelected

  • widgetDefaultSelected通常是在按下组合键的文本区域时调用的。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...