0

私はRCPに基づいたアプリケーションを開発しています。最近、RAPに移動しました。以前は、RCPで型指定されていないイベントを使用して、さまざまな目的で必要なデータを渡していました。たとえば、サーバーからデータを取得するための「データの取得」というボタンがあります。サーバーから受信したデータを保持するテーブルビューアーがあります。ユーザーがこのボタンをクリックすると、イベントが発生し、各テーブルでそのイベントがリッスンされます。私は次のようにしました:

//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()が呼び出されることはありません:(。

データを渡すときの方法を変えたくありません。昔ながらのやり方を続けられるかどうか教えてください。コメントありがとうございます。

4

1 に答える 1

0

カスタムイベントタイプは現在、RAPではサポートされていません(主にバグ334028が原因です)。

ただし、SWTでそれを行うことはできますが、これはSWTイベントの誤用と見なします。カスタムウィジェットでは許容できる場合がありますが、これらのメソッドは、アプリケーションレベルで使用している間、ウィジェットレベルのイベント用に予約されています。また、JavaDocはWidget#notifyListeners()、次のWidget#addListener()ように明確に述べています。

イベントタイプは、クラスで定義されているイベント定数の1つです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.EventObjectありEventListenerます。

于 2012-02-12T19:35:30.580 に答える