2017-03-19 40 views
11

TL; DR

Dựa trên bài viết Thomas Schindl 's JFace-Viewer and Eclipse Databinding with > 10.000 Objects (điều này cho thấy một ý tưởng rất tốt), tôi muốn chuyển đổi thường xuyên TreeViewer + nhiều ITreeContentProvider triển khai để Nebula's GridTreeViewer trong đó sử dụng ObservableListTreeContentProvider, một VisibleRangeChangedListenerEclipse Data Binding để làm cho nó "lười biếng" (lazier) và tải dữ liệu theo yêu cầu.TreeViewer để GridTreeViewer: cầu nối giữa ITreeContentProviders hiện có và "lười biếng" ObservableListTreeContentProvider

Tôi nên viết lại các triển khai ITreeContentProvider hiện có thường xuyên của mình để sử dụng cùng một cấu trúc phân cấp với ObservableListTreeContentProvider như thế nào? Tôi có thể tạo ra "cầu nối" giữa giải pháp cũ và mới không? Sử dụng DelegatingListProperty bằng cách nào đó như this? Bất kỳ ý tưởng nào khác?
Tôi đã tìm thấy một số ví dụ quá đơn giản, nhưng tôi không thực sự có khái niệm về việc sử dụng Ràng buộc dữ liệu theo định dạng cây phân cấp phức tạp như vậy.

Ví dụ cây & cung cấp nội dung:

nhà cung cấp nội dung 1 .:

|- A1 
    |-- B1 
     |-- MyMessage1 
|- A2 
    |-- B2 
     |-- MyMessage2 

Content cung cấp 2 .:

|- C1 
    |-- D1 
     |-- MyMessage1 
|- C2 
    |-- D2 
     |-- MyMessage2 

Còn giải thích

tôi có một cái nhìn nơi tôi hiển thị số tiền khổng lồ của objec ts trong một định dạng phân cấp cây sử dụng một tùy chỉnh TreeViewer với cổ điển ITreeContentProviderLabelProvider + ITableLabelProvider triển khai. Ngoài ra còn có một trình đơn mà người dùng có thể chọn định dạng mà họ muốn xem thứ bậc này được hiển thị. Khi người dùng chọn một định dạng hiển thị khác, điều duy nhất xảy ra là việc triển khai ITreeContentProvider khác được đặt cho người xem và tôi làm mới trình xem theo chương trình.
Nó hoạt động, nhưng do số lượng lớn các yếu tố (trong một số trường hợp, 100-200 nghìn hàng, vui lòng không hỏi lý do, nó chỉ hoạt động), hiển thị các mục có thể là chậm, đôi khi giao diện người dùng bị đóng băng, vì có quá nhiều người nghe trên TreeItems, việc làm mới chế độ xem mất rất nhiều thời gian, v.v ...

Vì vậy, tôi muốn sử dụng một số loại giải pháp lười lười biếng khi có các thành phần mô hình được nạp vào bộ nhớ.
Tôi đã thử SWT.VIRTUAL and ILazyTreeContentProvider, nhưng nó hoạt động kém (thậm chí nếu sử dụng viewer.setUseHashlookup(true)) và đã có vấn đề (khi cuộn, phải mất rất nhiều thời gian để TreeItems tải, có bugs, các vấn đề về phân loại, lọc, v.v.).

Bây giờ tôi đã đọc bài viết trên blog của Thomas Schindl: JFace-Viewer and Eclipse Databinding with > 10.000 Objects. Tôi muốn thử loại này sử dụng 's Eclipse Nebula GridGridTreeViewer và + ObservableListTreeContentProvider (mà cũng là một thực hiện ITreeContentProvider) và 'lười biếng' nhà cung cấp VisibleRangeChangedListener và nhãn (như trong bài viết). Tôi có thể sử dụng cách triển khai ITreeContentProvider hiện tại của mình và xây dựng "cầu nối" giữa điều này và ObservableListTreeContentProvider mới không?


BTW Tôi đã kiểm tra Nebula NatTable, nhưng tôi thấy nó rất khó để di chuyển các nhà cung cấp nội dung hiện có để giải pháp mới này, API của nó và cách tiếp cận của nó là hoàn toàn khác nhau (hệ thống phân cấp đi từ con để phụ huynh, không phải là cách đối diện) và tài liệu liên quan đến Trees vẫn còn trống.

Trả lời

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