0

我一直在尝试使用 jface 渲染表格。问题是我渲染的列之一保存了数组内元素的索引。我执行以下操作:

TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE);
tableViewerColumn.setLabelProvider(new ColumnLabelProvider() {      
    public String getText(Object object) {
        //EmployeeNames is list of String
        return String.valueOf(company.getEmployeeNames().indexOf(object)+ 1);
    }
});

如果有任何重复,这将始终返回第一个索引出现。我没有更改 EmployeeNames 类型的奢侈。

你能给我一个提示来处理这个索引问题吗?

4

1 回答 1

1

解决方案 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 "";
     }
});
于 2013-04-05T20:48:07.903 回答