如何使用TableViewer Jface创建带值的动态列



我需要在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的类。假设其中一个类命名为Employee
  1. 上述类之一的数组列表将成为您使用的Tableviewer的输入。使用Tableviewer.setInput(empList)
  2. 现在实现您自己的标签提供程序。现在它在Labelprovider的getValue()方法中,您应该使用反射API来调用您希望显示的表字段的getXXXX()。这里有一个很好的参考资料。反射只不过是Java提供的一个自省API,它可以获取类及其属性的细节。
  3. 您可以通过创建一个新的类来启用编辑,通过子类化EditingSupport class并将实例添加到columnviewer的addEditingSupport()方法

请记住,tableviewer列头可以是您的Employee类的字段名,也可以通过反射API获得。

最新更新