【问题标题】:Fire selection event from code来自代码的触发选择事件
【发布时间】:2012-09-21 22:49:18
【问题描述】:

我正在 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);

没有事件被触发。在这种情况下,我是否必须编写自己的监听器?

【问题讨论】:

    标签: java eclipse events selection rcp


    【解决方案1】:

    组合框的select 方法在更改选择时会发送SWT.Modify 类型的事件,因此您可以使用ModifyListener 而不是SelectionListener

    实际上,ModifyListener 监听组合框文本字段的变化,这意味着它会对由选择引起的文本变化做出反应。这也意味着如果该文本被其他路径更改(例如组合文本字段中的用户条目),它将被触发。

    牢记这种行为,ModifyListener 可能是一种选择。

    【讨论】:

    • 感谢您的回复,ModifyListener 完成了这项工作。我找到了一种使用 SelectionListener 的方法,即在从代码更改选择后使用 randomComboBox.notifyListeners(SWT.Selection, new Event()) 。无论如何 ModifyListener 更漂亮:]
    • @deckardcain 我喜欢你的 notifyListeners 解决方案
    • @deckardcain 重新审视这个问题,我相信您使用 notifyListeners 的解决方案要干净得多。您应该将其添加为答案并接受它。
    【解决方案2】:

    如果您的 ComboBox 是“只读”

    ,请不要使用 ModifyListener
    Combo comboBoxColor = new Combo(composite, SWT.BORDER | SWT.READ_ONLY);
    

    您可以显式触发任何事件(以编程方式) 例如

    control.notifyListeners(eventType , event);
    

    在你的情况下:

    comboBoxColor.notifyListeners(SWT.Selection, new Event())
    
    1. SWT.Selection -> 事件类型,可以从SWT类中获取所有事件常量。

    2. new Event() -> 事件对象

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多