我需要在eclipse RCP应用程序中的一个TableViewer中创建动态列。
这个想法是我需要创建一个交叉表。
Column 0 | Column 1| Column 2| Column 3| Column n
=================================================
Data 0,0 | Data 0,1| Data 0,2| Data 0,3| Data 0,n
Data 1,0 | Data 1,1| Data 1,2| Data 1,3| Data 1,n
Data 2,0 | Data 2,1| Data 2,2| Data 2,3| Data 2,n
Data 3,0 | Data 3,1| Data 3,2| Data 3,3| Data 3,n
我用它来创建动态列。
//Recuperar Crossing Block del Grupo
for (int i=0; i < cbsCombinado.size(); i++) {
tableViewerColumn = new TableViewerColumn(this.tableCombinadoViewer, SWT.NONE);
tblclmnParcela = tableViewerColumn.getColumn();
tblclmnParcela.setWidth(100);
tblclmnParcela.setText( cbsCombinado.get(i).getNroParcela().toString());
tblclmnParcela.setData(cbsCombinado.get(i)); //Asigno el Participante.
};
所以我正在从数据库中读取记录,并创建每个记录的列。
问题是我需要检索我在列中设置的数据。我需要得到第n列和第I行的Id,以查询数据库。
任何想法?
问好嗨,我现在的方法是这样的。创建一个包含列的ArrayList类:
class Grilla {
private BloqueCruzamiento bc_x;
private ArrayList<BloqueCruzamiento> bc_list_y;
private Boolean selected;
}
和ContentProvider:
class BloqueCruzaCombContentProvider implements IStructuredContentProvider {
public void dispose() {
// TODO Auto-generated method stub
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// TODO Auto-generated method stub
}
@SuppressWarnings("unchecked")
public Object[] getElements(Object obj) {
ArrayList<Grilla> grid = (ArrayList<Grilla>) obj;
return grid.toArray();
}
}
我就是这样填充数组列表的
List<Grilla> cbsArrayL = new ArrayList<Grilla>() ;
Grilla grid = new Grilla();
for (BloqueCruzamiento cb : cbs) {
grid.bc_x = cb;
grid.bc_list_y = new ArrayList<BloqueCruzamiento>();
grid.selected = false;
for (BloqueCruzamiento ccb : cbsCombinado)
{
grid.bc_list_y.add(ccb);
}
cbsArrayL.add(grid);
grid = new Grilla();
}
tableCombinadoViewer.setContentProvider(new BloqueCruzaCombContentProvider());
tableCombinadoViewer.setLabelProvider(new BloqueCruzaCombLabelProvider());
if (cbs!=null) tableCombinadoViewer.setInput(cbsArrayL);
我现在的目标是使每个CELL可编辑,但在某些情况下不应该是可编辑的。再次问候
我假设要显示的每个表结构都有一个java类。因此,您可以使用java反射API为表查看器列提供标题并显示数据
编辑:我看到你的代码几乎完成了70%的需要完成的工作。为了便于理解,我只是在附加一些细节的情况下重复这些步骤
- 定义一个java类来描述表中的字段。包括字段的getter和setter。如果有n个不同的表,创建n个带有getter和setter的类。假设其中一个类命名为
- 上述类之一的数组列表将成为您使用的Tableviewer的输入。使用
Tableviewer.setInput(empList)
现在实现您自己的标签提供程序。现在它在Labelprovider的 - 您可以通过创建一个新的类来启用编辑,通过子类化
EditingSupport
class并将实例添加到columnviewer的addEditingSupport()
方法
Employee
getValue()
方法中,您应该使用反射API来调用您希望显示的表字段的getXXXX()
。这里有一个很好的参考资料。反射只不过是Java提供的一个自省API,它可以获取类及其属性的细节。请记住,tableviewer列头可以是您的Employee
类的字段名,也可以通过反射API获得。