Eclipse RCP uygulamasında veritabanını anlamada sorun yaşıyorum. Sadece Eclipse RCP uygulamasında bir listeyi ciltleme için en iyi yöntem
İşte
Ben metinler listesi görüntülenmesi gereken bir görünümü var yapmak istediğim bu .. işe gerekiyordu anlamaya olamaz. Metinler, bir tekil yoluyla sağlanan basit bir List<String>
'da "saklanır" (yalnızca gösterim amacıyla;)). Yani ListProvider
'u kullanan kişi metinlerin listesini alacak. Liste değiştiğinde, Görünümümün tablo içeriğini otomatik olarak güncellemesini istiyorum.
Ben bugüne kadar
My Liste sağlayıcısına yapıldığında liste değişiklikleri gözlemci bilgilendirecek bir Observable
olduğunu buydu.
Görüşüme göre, liste sağlayıcısını izlemek için bir Gözlemci oluyorum ve gözlemciye bildirildiğinde görünümümü yenile.
Kod ListProvider
için: görünüm için
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();
}
}
Kodu:
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);
}
}
Soru
gitmek yoksa ben üzere Observer
ve Observable
"doğru" yolu kullanıyor bir şey mi eksik? RCP Databinding kavramını kavradığımdan emin değilim ...
Listenizdeki öğelerin kapsamından emin değilim, ancak basit bir SWT Listesi eklemeyi düşündünüz mü (http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.platform .doc.isv% 2Freference% 2Fapi% 2Forg% 2Feclipse% 2Fswt% 2Fwidgets% 2FList.tableviewer vb. yerine görünümünüze html) nesnesi – nbz
Ayrıca bir ListViewer kullanmak daha iyi olabilir (http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc. isv% 2Freference% 2Fapi% 2Forg% 2Feclipse% 2Fjface% 2Fviewers% 2FListViewer.html) bir TableViewer yerine. – nbz
Giriş için teşekkürler. Şu anda sadece bir liste ama daha sonra diğer sütunlara daha fazla veri eklemek istiyorum. ListViewer kullanmak, listeyi gözlemlememi değiştirir mi? – Friederike