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

时间:2014-08-18 19:53:46

标签: mysql eclipse tableview 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.
    };

所以我正在从数据库中读取记录,并为每条记录创建一个列。

问题是我需要检索我在te列中设置的数据。 我需要获取列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();
    }

}   

这就是我填充ArrayList的方法:

    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都可以编辑,但在某些情况下不应该是可编辑的。 再次问候

1 个答案:

答案 0 :(得分:0)

我假设您将要显示的每个表结构都有一个java类。因此,您可以使用java反射API为表查看器列提供标题并显示数据

编辑: 我看到你的代码几乎有70%需要完成。为了便于理解,我只是重复一些其他细节的步骤

  1. 定义一个描述表中字段的java类。包括字段的getter和setter。如果有'n'个不同的表,则使用getter和setter创建'n'这样的类。假设其中一个类名为Employee
  2. 上述某个类的数组列表将成为您使用的Tableviewer的输入。使用类似Tableviewer.setInput(empList)
  3. 的内容
  4. 现在实施您自己的标签提供商。现在,在Labelprovider的getValue()方法中,您应该使用反射API来调用您希望显示的表字段的getXXXX()。一个很好的参考是here。反射只不过是Java提供的内省API,它获取有关类及其属性的详细信息。
  5. 您可以通过对EditingSupport类进行子类化并将实例添加到列查看器的addEditingSupport()方法
  6. 来创建新类来启用编辑

    请记住,tableviewer列标题可以是Employee类的字段名称,也可以通过反射API获取。

    希望这澄清