解决方案 1:单元格索引
这里有一个小类,可以用作列标签提供程序,以在 JFace TableViewer 中显示行号。
基本上,它不查找与单元格关联的对象的索引,而是查找单元格本身。
import java.util.Arrays;
import org.eclipse.jface.viewers.CellLabelProvider;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.jface.viewers.ViewerColumn;
public class RowNumberLabelProvider extends CellLabelProvider {
private TableViewer viewer;
protected void initialize(ColumnViewer viewer, ViewerColumn column) {
super.initialize(viewer, column);
this.viewer = null;
if (viewer instanceof TableViewer) {
this.viewer = (TableViewer) viewer;
}
}
public void update(ViewerCell cell) {
super.update(cell);
if (viewer != null) {
int index = Arrays.asList(viewer.getTable().getItems()).indexOf(cell.getItem());
cell.setText("" + (index + 1));
}
}
}
要使用它,只需将其设置为列的标签提供者
TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE);
tableViewerColumn.setLabelProvider(new RowNumberLabelProvider());
我不确定在启用过滤器或对表格进行排序时它是否也能正常工作。
解决方案 2:按参考搜索
作为替代方案,您也可以尝试通过引用查找对象:
TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE);
tableViewerColumn.setLabelProvider(new ColumnLabelProvider() {
public String getText(Object object) {
int index = 1;
for (String employee : company.getEmployeeNames()) {
if (employee == object)
return String.valueOf(index);
index++;
}
return "";
}
});