有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么在使用键盘完成选择时不触发选择事件?

我有一个EclipseRCP应用程序,它使用SWT。下面是一个示例代码

    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 JAR。我将感谢任何帮助


共 (2) 个答案

  1. # 1 楼答案

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

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

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

  2. # 2 楼答案

    由于选择事件不是用键盘触发的,所以我在combo小部件中添加了一个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
                }
            }
        });
    

    似乎我正在从列表框中取出所选项目。到目前为止,它似乎工作正常