如何按多列JFace TableViewer进行排序

时间:2015-12-23 07:10:39

标签: java swt jface

我试图实现一个tableviewer,它可以根据用户点击列标题的顺序对值进行排序。 例如如果列列有column1,column2,column3和user三列,则按以下顺序列出column3,column2,column1,然后,第3列的值首先排序,然后是第2列,最后是column1。

我已经按照以下方式覆盖了比较方法:

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;
    }
}   

这个逻辑不起作用,这就是发生的事情: 对于例如column3由用户选择,此列将被排序。但是下次当另一列说单击column2时,TableViewer中的对象row1和row2不会以最新的有序格式出现。

我如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

您面临的问题似乎是排序算法的属性。 在实现column2排序后,稳定算法将使日期column1排序。 您必须检查方法getOrderedList()中的算法是否为stable