如何为每个表列设置不同的比较器? (Eclipse插件)

时间:2016-01-07 10:01:04

标签: java eclipse-plugin

我为将来的Eclipse插件创建了一些通用类。

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

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

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

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

    @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 ....
      }
     }

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

根据greg回答编辑:

创建列的位置:

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

在Comparator类中:

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

1 个答案:

答案 0 :(得分:1)

对于表格中的每个TableColumn,您需要调用TableColumn.addSelectionListener来添加在单击列标题时调用的侦听器。

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