2010-02-09 32 views
14

Trong RCP Eclipse, tôi tạo chế độ xem cho Phối cảnh bằng cách sử dụng IPageLayout.addView(...)Làm thế nào để giao tiếp giữa các khung nhìn trong RCP Eclipse?

Nhưng theo cách này tôi không có tham chiếu đến chế độ xem. Vì vậy, tôi không biết làm thế nào tôi có thể nói với ViewA để cập nhật ViewB.

Mẫu tốt nhất để sử dụng ở đây là gì?

Trả lời

15

Bên cạnh những gì VonC đã đề cập ở trên, bạn cũng có thể sử dụng ISourceProviderListener nếu những thay đổi bạn nhu cầu không được kích hoạt bằng cách lựa chọn.

  • ViewB thực hiện ISourceProviderListener
  • Tạo một thực hiện ISourceProvider và đăng ký nó trong các dịch vụ
  • ViewA được ISourceProvider và cập nhật nó để kích hoạt những thay đổi trong ViewB

Đọc tài liệu trên các giao diện đó cùng với IServiceLocatorISourceProviderService để có ý tưởng tốt hơn về cách tất cả diễn ra.

Bạn cũng có thể nhìn thấy this Lars Vogel's tutorial trong đó có một số ví dụ làm thế nào để sử dụng ISourceProvider

+0

'ISourceProviderListener': Tôi bị mất rằng một. Giải pháp tốt quá. +1. Và đó sẽ là "Bên cạnh những gì VonC đã đề cập ** dưới đây **";) – VonC

+1

Đáng buồn thay, đây không còn là cách hoạt động của e4. Không có nhiều lượt xem và biên tập viên, chỉ ... phần. Thông tin về cách giao tiếp giữa chúng hoạt động có vẻ khó tìm cho e4. Đối với bất kỳ ai khác đang tìm kiếm, [hướng dẫn mới hơn] (http://www.vogella.com/tutorials/Eclipse4EventSystem/article.html) dường như chỉ đường. –

8

Bạn có mô hình truyền thông khác nhau tóm tắt trong IBM article

  • Để thực hiện một quan điểm có khả năng lắng nghe những thay đổi lựa chọn, một cái nhìn phải thực hiện các giao diện ISelectionListener và phải tự đăng ký với trang workbench
  • Sử dụng giao diện IAdaptable: Lớp thực hiện IAdaptable có khả năng tự động trả về một số loại bộ điều hợp nhất định mà sau đó có thể được sử dụng để truy xuất thêm thông tin.
  • thay đổi sở hữu nghe mô

Về phương pháp tiếp cận đầu tiên, các chi tiết bài viết:

Một cách thông minh hơn để tiêu thụ các lựa chọn giao diện người dùng là để đăng ký các quan điểm của người tiêu dùng như người nghe đến các bộ phận quan điểm cụ thể. Như bạn có thể thấy trong ví dụ bên dưới, ID chế độ xem của phần chế độ xem nguồn được đề cập dưới dạng tham số trong khi đăng ký trình lắng nghe lựa chọn.

getSite().getPage().addSelectionListener("SampleViewId",(ISelectionListener)this); 

Cách tiếp cận này sẽ loại bỏ các callbacks dự phòng để quan điểm của người tiêu dùng mà nếu không sẽ xảy ra nếu quan điểm đó đã được đăng ký như là một người biết lắng nghe không đặc hiệu.

Đoạn mã trong Liệt kê 2 cho thấy phương thức createPartControl() của chế độ xem tạo ra một JFaceTableViewer và thêm nó làm nhà cung cấp lựa chọn cho trang web bàn làm việc. Mã này cho phép bất kỳ thay đổi lựa chọn giao diện người dùng nào trong số TableViewer để truyền đến trang và cuối cùng là đến lượt xem của người tiêu dùng quan tâm.

Liệt kê 2. Trích lập một nhà cung cấp lựa chọn

public void createPartControl(Composite parent) { 
    // Set up a JFace Viewer 
    viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); 
    viewer.setContentProvider(new ViewContentProvider()); 
    viewer.setLabelProvider(new ViewLabelProvider()); 
    viewer.setSorter(new NameSorter()); 
    viewer.setInput(getViewSite()); 

    // ADD the JFace Viewer as a Selection Provider to the View site. 
    getSite().setSelectionProvider(viewer); 

} 

Bạn sẽ tìm thấy một cách tiếp cận tương tự trong RCP tutorial for eclipse3.5 (update February, 4th 2010)

1

Có nhiều cách khác nhau để xem và plugin thông tin liên lạc: eventbroker, nghe vv ..

EvenBroker (e4) Thực hiện: Sử dụng bộ tổ chức sự kiện để gửi tin nhắn (chuỗi) giữa các chế độ xem và plugin.

Sender Side:

@Inject 
private IEventBroker eventBroker; 
private static final String STATUS ="status"; 
eventBroker.send(STATUS, "status test message.."); 

Receiver Side:

@Inject 
private IEventBroker eventBroker; 
private static final String STATUS ="status"; 
@Inject @Optional 
public void getEvent(@UIEventTopic(STATUS) String message) { 
    ... //call method 
} 
+0

Tôi sẽ không lặp lại biến 'STATUS' (chỉ có nó như là một' public static final String' và tham chiếu nó từ cả người gửi và người nhận), nhưng ngược lại, đây là cách để đi vào e4. Bằng cách này, bạn có thể gửi bất kỳ đối tượng nào bạn thích theo cách này, không chỉ các chuỗi và nếu bạn muốn điều này xảy ra không đồng bộ, hãy sử dụng 'broker.post()' thay vì 'broker.send()'. –

Các vấn đề liên quan