如何为每个 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 时调用。
选择侦听器需要记住当前列以供比较器使用。
我正在为将来的 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 时调用。
选择侦听器需要记住当前列以供比较器使用。