java - 如何按 JFace TableViewer 的多列排序

标签 java swt jface

我正在尝试实现一个表格查看器,它可以根据用户点击列标题的顺序对值进行排序。 例如如果有三列 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/

相关文章:

java - 模拟/模拟 MySql 数据库以进行单元测试

java - 在 eclipse-rcp/swt 中创建多个相同的文本验证监听器

java - 如何在SWT shell中以只读模式打开word文档

java - 在另一个模态 JFace 对话框之上打开模态 JFace 对话框

java - 如何根据较短的文本标签换行较长的文本标签?

java - 在 netbeans 8.2 中添加 Glassfish Server 5.0

java.io.FileNotFoundException - 文件确实存在于目录中

java - 如何找到java.rmi包的jar

java - 我应该处理从 EditorSupport 返回的 jface CellEditors

eclipse - 使用 Eclipse TableViewer,如何使用箭头键导航和编辑单元格?