我一直在尝试使用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);
}
});
如果有任何dublicates,这将始终返回第一个索引出现。 我没有办法改变EmployeeNames的类型。
你能否给我一个处理这个索引问题的提示!
答案 0 :(得分: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());
我不确定当启用过滤器或表已排序时它是否也能正常工作。
作为替代方案,您还可以尝试通过引用来查找对象:
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 "";
}
});