Java 如何为每个表列设置不同的比较器?(Eclipse插件)
我正在为将来的Eclipse插件创建一些通用类 其中一个类用于将tableviewer添加到视图中 我想为不同的列创建不同的比较方法Java 如何为每个表列设置不同的比较器?(Eclipse插件),java,eclipse-plugin,Java,Eclipse Plugin,我正在为将来的Eclipse插件创建一些通用类 其中一个类用于将tableviewer添加到视图中 我想为不同的列创建不同的比较方法 MyComparator comparator = new MyComparator(); viewer.setComparator(comparator); MyComparator扩展了ViewerComparator,我覆盖了比较方法。我将定义如何基于所选列比较对象 @Override public int compare(Viewer v
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 ....
}
}
如何在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();
}
});
在比较级:
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;
}
}
对于表中的每个
TableColumn
,您需要调用TableColumn.addSelectionListener
,以添加一个在单击列标题时调用的侦听器
选择侦听器需要记住比较器要使用的当前列。什么列名?比较器比较整行。您的意思是要单击列标题并将排序更改为基于该列吗?是的,这就是我想要的行为无法从比较中的查看器对象检索TableColumn对象?或者ViewerComparator类中已经存在的任何其他方法?