问题描述
我有使用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
通常是在按下组合键的文本区域时调用的。