Eclipse RCPアプリケーションに仮想テーブルがあります。バックエンドへの呼び出しを行って、仮想テーブル内のデータを取得します。仮想テーブルとViewerComparatorのデフォルトソートの問題
単一の列の表に対してデフォルトのソートが必要です。 ViewerComparatorを使用してソート機能を実現します。私の問題は、私はテーブルが最初の時間のデータを読み込むときに、このソート機能を得ることができないということです。しかし、私が列をクリックすると、すべて正常に正常に動作します。
これは私がカスタムビューアの列
TableViewerColumn tvc = viewer.addColumn(100, SWT.LEFT, "Name");
viewer.setColumnComparator(tvc,
new Comparator<Person>() {
@Override
public int compare(Person o1,Person o2) {
double firstValue = Double.parseDouble(o1
.getAge());
double secondValue = Double.parseDouble(o2
.getAge());
return firstValue > secondValue ? 1 : -1;
}
});
setColumnComparator方法
public void setColumnComparator(TableViewerColumn tvc, Comparator<T> cmp){
final MyViewerComparator c = new MyViewerComparator(cmp);
final TableColumn tc = tvc.getColumn();
setComparator(c);
getTable().setSortDirection(c.getDirection());
getTable().setSortColumn(tc);
refresh();
tc.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
<same code as above>
}
});
MyViewerComparator
class MyViewerComparator extends ViewerComparator{
Comparator<T> cmp;
boolean desc = true;
MyViewerComparator(Comparator<T> cmp){
this.cmp = cmp;
}
int getDirection(){
return desc?SWT.UP:SWT.DOWN;
}
void flipDirection(){
desc = !desc;
}
@Override
public int compare(Viewer viewer, Object e1, Object e2) {
場合(E1 ==にコンパレータを設定する方法であり、 null || e2 == null){
return 0;
}
int rc = cmp.compare((T)e1, (T)e2);
if(desc)
return -rc;
return rc;
}
}
テーブルは1回目のデータをロードするとき、オブジェクトの一つが
常にNULLある注意として、上記のコードで太字条件内部に入ります。この機能は、VIRTUAL TABLEではなくStandardテーブルを使用すると完全に正常に機能します。そのうまくいけば... ObservableListContentProvider
お知らせください
誰かがこの問題を解決できるかどうか本当に感謝しますか?私はいつかこの問題に悩まされています。私は本当にこの問題を解決する必要があります。 – user1166031
あなたはhttp://www.eclipse.org/forums/index.php/t/288720/を見ましたか? –