我正在eclipse中编写一个包含组合框的RCP应用程序,并且在选择其任何项目时,都会触发选择事件,并且一些随机代码开始起作用。侦听器看起来像这样:
randomComboBox.addSelectionListener(new SelectionListener(){
@Override
public void widgetSelected(SelectionEvent e) {
// random code
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
// TODO Auto-generated method stub
}
});
我的问题是:是否可以从代码中触发事件?例如,如果我添加:
randomComboBox.select(0);
没有事件被触发。在这种情况下,我必须编写自己的侦听器吗?
组合框的select
方法在更改选择时发送类型为SWT.Modify
的事件,因此您可以使用ModifyListener
而不是SelectionListener
。
实际上,ModifyListener
侦听组合框文本字段中的更改,这意味着它对选择所引起的文本更改做出反应。这也意味着,如果该文本被其他路径更改(例如,组合文本字段中的用户条目),则将被触发。
记住这一行为,可以选择ModifyListener
。
如果您的组合框为“只读”,请不要使用ModifyListener
Combo comboBoxColor = new Combo(composite, SWT.BORDER | SWT.READ_ONLY);
您可以显式触发任何事件(以编程方式)例如
control.notifyListeners(eventType , event);
根据您的情况:
comboBoxColor.notifyListeners(SWT.Selection, new Event())
SWT.Selection->事件类型,可以从SWT类获取所有事件常量。
new Event()->事件对象