2012-01-10 5 views
0

RCP 기반의 응용 프로그램을 개발 중입니다. 최근에 RAP로 옮겼습니다. 이전에는 여러 가지 목적으로 필요한 데이터를 전달하기 위해 RCP에서 유형이 지정되지 않은 이벤트를 사용했습니다. 예를 들어, 서버에서 데이터를 가져 오기 위해 "데이터 가져 오기"버튼이 있습니다. 나는 server.When에서받은 데이터를 개최하는 몇 가지 tableviewer 가이 버튼을 클릭하면, 나는 이벤트를 발생시키고 각 테이블에서 해당 이벤트를 수신 대기합니다. 나는 다음과 같이했다 :RAP에서 유형이 지정되지 않은 이벤트가 지원 되었습니까?

//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는 사용자가 "Get Data"버튼을 클릭 할 때마다 그 이벤트를 정상적으로 수신 대기한다. 그러나 그것은 RAP에서 작동하지 않았습니다. RAP가 이러한 종류의 유형화되지 않은 이벤트를 이미 지원했는지는 알 수 없습니다.

데이터를 전달할 때 변경하지 않으려는 경우 이전 방법으로 계속 진행할 수 있는지 알려주세요. 모든 의견을 보내 주시면 대단히 감사하겠습니다.

답변

0

고객 이벤트 유형은 현재 (대부분 때문에 bug 334028의) RAP에서 지원되지 않습니다.

그러나 SWT에서, 나는이 SWT 이벤트의 오용 고려할 것이라고 할 수 있지만. 그것은 사용자 정의 허용 될 수 위젯을 사용하지만 응용 프로그램 수준에서 위젯을 사용하는 동안 이러한 메서드는 위젯 수준의 이벤트 용으로 예약됩니다. 또한 JavaDoc Widget#notifyListeners()Widget#addListener()은 명확하게 :

이벤트 유형은 SWT 클래스에 정의 된 이벤트 상수 중 하나입니다.

대신 사용자 정의 이벤트를 사용하여, 당신은 컴포지트 (composite) 사용자 정의 인터페이스를 구현하도록 할 수 있습니다 :

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을 사용해야합니다.