我正在尝试实现一个表格查看器,它可以根据用户点击列标题的顺序对值进行排序。 例如如果有三列 column1、column2、column3,并且用户按以下顺序单击了 column3、column2、column1,则首先对第 3 列的值进行排序,然后是第 2 列,最后是第 1 列。
我已经通过以下方式覆盖了比较方法:
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 不会以最新的排序格式出现。
我如何实现这一目标?
最佳答案
您面临的问题似乎与排序算法的属性有关。
在您实现 column2 排序后,稳定算法将使您的日期 column1 排序。
您必须检查方法 getOrderedList()
中的算法是否为 stable .
关于java - 如何按 JFace TableViewer 的多列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34430436/