【问题标题】:Untyped events were supported in RAP?RAP 支持无类型事件吗?
【发布时间】:2013-12-06 08:00:05
【问题描述】:

我正在开发一个基于 RCP 的应用程序。最近,我已将其移至 RAP。之前,我在 RCP 中使用了一些无类型的事件来传递一些必要的数据以用于不同的目的。 例如,我有一个名为“获取数据”的按钮来从服务器获取数据。我有一些 tableviewer 来保存从服务器接收到的数据。当用户单击此按钮时,我想引发一个事件,并且在每个表中都会监听该事件。我做了以下:

//Part 1

Button btgetData=new Button(compositeLabels,SWT.PUSH);
        btgetData.setText("Get Data");
        btgetData.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                //raise event here
                Event event =new Event();
                event.detail=12345;
            getRoot().getShell().notifyListeners(MYEVENTCONST, event);
            }           
        });

//Part 2: 
//In each composite that hold TableViewer , listen event

getShell().addListener(MYEVENTCONST, new Listener() 
            public void handleEvent(Event event) {
      if(event.detail==12345)
              doProcessing();               
        });

在 RCP 中,每次用户单击“获取数据”按钮时,每个 TableViewer 都会正常监听该事件。但它在 RAP 上不起作用,我不知道 RAP 是否已经支持这种无类型事件。永远不会调用函数 doProcessing() :(.

我不想改变传递数据的方式。请让我知道我是否可以继续以旧方式前进。我非常感谢您的任何评论。

【问题讨论】:

    标签: java events eclipse-rcp jface eclipse-rap


    【解决方案1】:

    RAP 目前不支持自定义事件类型(主要是因为bug 334028)。

    但是,尽管您可以在 SWT 中这样做,但我认为这是对 SWT 事件的滥用。对于自定义小部件可能是可以接受的,但是当您在应用程序级别使用它们时,这些方法是为小部件级别的事件保留的。此外,Widget#notifyListeners()Widget#addListener() 的 JavaDoc 明确指出:

    事件类型是类SWT中定义的事件常量之一。

    您可以让您的组合实现自定义接口,而不是使用自定义事件:

    public interface ProcessingControl {
    
      void doProcessing();
    
    }
    

    并定义一个递归遍历组合子节点的更新方法:

    static void updateChildren( Composite parent ) {
      for( Control child : parent.getChildren() ) {
        if( child instanceof ProcessingControl ) {
          ( ( ProcessingControl )child ).doProcessing();
        }
        if( child instanceof Composite ) {
          updateChildren( ( Composite )child );
        }
      }
    }
    

    那你可以拨打updateChildren( shell );

    如果您更喜欢使用事件和侦听器,您应该使用 java.util.EventObjectEventListener 来达到您的目的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-09
      • 1970-01-01
      • 2013-07-15
      • 2019-04-05
      相关资源
      最近更新 更多