Tôi gặp khó khăn khi hiểu dữ liệu trong ứng dụng RCP Eclipse của tôi. Tôi chỉ không thể hiểu nó như thế nào là nghĩa vụ phải làm việc ..Cách thực hành tốt nhất để gắn kết dữ liệu danh sách trong ứng dụng RCP Eclipse
Đây là những gì tôi muốn làm
Tôi có một Xem nơi một danh sách các văn bản sẽ được hiển thị. Các văn bản được "lưu trữ" trong một đơn giản List<String>
được cung cấp thông qua một singleton (chỉ cho mục đích trình diễn;)). Vì vậy, bất cứ ai sử dụng ListProvider
sẽ nhận được danh sách các văn bản. Khi danh sách thay đổi, tôi muốn Chế độ xem của tôi tự động cập nhật nội dung bảng.
Dưới đây là những gì tôi đã làm cho đến nay
nhà cung cấp Danh sách của tôi là một Observable
đó sẽ thông báo cho các quan sát viên khi thay đổi danh sách.
Theo quan điểm của tôi, tôi tạo một người quan sát để xem nhà cung cấp danh sách và khi người quan sát được thông báo, tôi làm mới chế độ xem của mình.
Mã cho ListProvider
: Mã
public class ListProvider extends Observable {
private Stack<String> hist;
private static ListProvider instance;
// Singleton implementation
public static ListProvidergetInstance() {
if (null == instance) {
instance = new ListProvider
}
return instance;
}
public void add(String text) {
if (this.hist.size() == MAX_SIZE) {
this.hist.remove(MAX_SIZE-1);
}
this.hist.add(0, text);
// notify all observers
this.setChanged();
this.notifyObservers();
}
}
cho quan điểm:
public class TestView extends ViewPart {
private TableViewer viewer;
[...]
class ViewContentProvider implements IStructuredContentProvider {
public void inputChanged(Viewer v, Object oldInput, Object newInput) {
}
public void dispose() {
}
public Object[] getElements(Object parent) {
return ClipboardHistory.getInstance().getList().toArray();
}
}
public void createPartControl(Composite parent) {
viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
IContentProvider contentProvider = new ViewContentProvider();
viewer.setContentProvider(contentProvider);
viewer.setLabelProvider(new ViewLabelProvider());
viewer.setInput(getViewSite());
Observer listObserver = new Observer() {
@Override
public void update(Observable o, Object arg) {
// update the table viewer
viewer.refresh();
}
};
ListProvider.getInstance().addObserver(listObserver);
}
}
Câu hỏi
Đang sử dụng Observer
và Observable
"quyền" con đường để đi hay tôi thiếu một cái gì đó? Tôi không chắc mình đã nắm được khái niệm về Databinding RCP ...
Tôi không chắc chắn về phạm vi của các mục trong danh sách của bạn nhưng bạn có cân nhắc thêm một danh sách SWT đơn giản không (http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.platform .doc.isv% 2Freference% 2Fapi% 2Forg% 2Feclipse% 2Fswt% 2Fwidgets% 2FList.html) đối tượng để xem của bạn thay vì một tableviewer vv vv – nbz
Ngoài ra nó có thể là tốt hơn để sử dụng một ListViewer (http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc. isv% 2Freference% 2Fapi% 2Forg% 2Feclipse% 2Fjface% 2Fviewers% 2FListViewer.html) thay vì một TableViewer. – nbz
Cảm ơn bạn đã nhập. Hiện tại nó chỉ là một danh sách nhưng tôi muốn thêm nhiều dữ liệu hơn vào các cột khác sau này. Việc sử dụng ListViewer có thay đổi cách tôi quan sát danh sách không? – Friederike