为什么使用键盘完成选择时没有触发选择事件?

Why Selection event not triggered when selection is done using keyboard?

我有这个使用 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");
        }
    }); 

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

我的eclipse不是最新的,它的版本是3.6.2和它附带的swt JARs。如果有任何帮助,我将不胜感激。

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

    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 通常在按下 ENTER 键时调用组合的文本区域。