如何为每个 Table 列设置不同的比较器? (日蚀插件)

How to set different comparators for each Table column ? (Eclipse plugins)

我正在为将来的 Eclipse 插件创建一些通用的 classes。

其中一个 classes 旨在将 tableviewer 添加到视图。

我想为不同的列创建不同的比较方法。

MyComparator comparator = new MyComparator();
viewer.setComparator(comparator);

MyComparator 扩展了 ViewerComparator 并且我覆盖了比较方法。我想定义如何根据所选列比较对象。

    @Override
    public int compare(Viewer viewer, Object e1, Object e2) {
      String columnHeaderName = .....
      if(columnHeaderName == COLUMN_NAME)
        {
       //implement sort and return ....
        }
      else if(columnHeaderName == OTHER_COLUMN){
      //implement sort and return ....
      }
     }

如何在比较方法中获取列名或列对象?

根据格雷格的回答进行编辑:

创建列的位置:

columnObj.getColumn().addSelectionListener(new SelectionAdapter(){

        @Override
        public void widgetSelected(SelectionEvent e) {
            // TODO Auto-generated method stub
            table.setSortDirection(direction);
            table.setSortColumn(columnObj.getColumn());             
            viewer.refresh();               
        }           
    });

在比较器中 class:

private class SampleComparator extends ViewerComparator
{
    Table table;
    @Override
    public int compare(Viewer viewer, Object e1, Object e2) {
        // TODO Auto-generated method stub          
        String columnName = table.getSortColumn().getText();
        if(columnName == FIRSTCOLUMN)
        {
            System.out.println("Sorting for first column");
            //Sorting implementation for this column
        }
        else if (columnName == SECONDCOLUMN)
        {
            System.out.println("Sorting for second column");
            //Sorting implementation for this column
        }

        return super.compare(viewer, e1, e2);
    }

    private void setTable(Table table)
    {
        this.table = table;
    }       
}

对于 table 中的每个 TableColumn,您需要调用 TableColumn.addSelectionListener 来添加一个侦听器,该侦听器会在单击列 header 时调用。

选择侦听器需要记住当前列以供比较器使用。