2015-12-23 36 views
3

我試圖實現一個tableviewer,它可以根據用戶點擊列標題的順序對值進行排序。 例如如果有三列第一列,第二列和第三列,並且用戶點擊了以下順序第3列,第2列,第1列中的列,則第3列值的行首先被排序,然後第2列和最後第1列。如何按JFace的多列進行排序TableViewer

我已經overided中如下因素比較的方式方法:

protected int doCompare(Viewer tableViewer, Object row1, Object row2) 
{ 
    SampleTableLabelProvider labelProvider = SampleTableLabelProvider ((TableViewer) tableViewer).getLabelProvider()); 
    boolean areBothRowsEqual = false; 
    for(String orderedColumn : getOrderedList()) // getOrderedList() stores the column names in the order in which they are clicked by user 
    { 
     int orderedColumnIndex = // logic to get the index of orderedColumn in the tableViewer ; 
     if(compareStrings(labelProvider, row1, row2, orderedColumnIndex) == 0) 
     { 
      areBothRowsEqual = true; 
     } 
     else 
     { 
      areBothRowsEqual = false; 
      break; 
     } 

    } 
    if(areBothRowsEqual) 
    { 
     return compareStrings(labelProvider, row1, row2, columnIndex); 
    } 
    else 
    { 
     return 0; 
    } 
} 

這種邏輯是行不通的,這是發生了什麼事: 對於例如第3列由用戶選擇,並且該列被排序。但是下一次當另一列聲稱column2被點擊時,TableViewer中的對象row1和row2不會以最新的有序格式顯示。

我該如何做到這一點?

+0

getOrderedList()是否按正確的順序返回正確的列? –

+0

@RüdigerHerrmann是的,它確實以正確的順序返回了正確的列。 – user1168608

+0

@RüdigerHerrmann你認爲我錯過了什麼嗎? – user1168608

回答

0

您正面臨的問題似乎是排序算法的屬性。 穩定算法會在實現column2排序後讓您的日期列1排序。 您必須檢查方法getOrderedList()中的算法是否爲stable