有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何删除tableviewer中的冗余列?

我创建了tableviewer

列是动态创建的

问题是我总是在表中有另一列

我检查了列的名称,没有得到任何空列

可能是tableviewer的一种配置

你知道为什么我总是有另一个专栏吗

//gridViewer类

     public class MyGridViewer extends TableViewer {
     public MyGridViewer (Composite parent) {
    super(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);

    final Table table = this.getTable();
    table.setHeaderVisible(true);
    table.setLinesVisible(true);

    this.setContentProvider(new MyModelProvider());

        }
      }


     @Override
    protected void inputChanged(Object input, Object oldInput) {

    removeColumn();



        tableCol = new TableViewerColumn(this, SWT.NONE);
        column = tableCol.getColumn();
        column.setText(dataColumnHeader.getName());
        column.setWidth(100);
        column.setResizable(true);
        column.setMoveable(true);
        tableCol.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                DataRow r = (DataRow) element;
                DataCell c = r.getDataCellByName(dataColumnHeader.getName());
                if (c != null && c.getValue() != null) {
                    return c.getValue().toString();
                }
                return null;
            }
             @Override
             public Image getImage(Object element) {
                   //Add my imgae
             }
        });



     editingSupport = new StringCellEditingSupport(this, dataColumnHeader);
     tableCol.setEditingSupport(editingSupport);
        super.inputChanged(input, oldInput);

}

共 (1) 个答案

  1. # 1 楼答案

    我不知道您引用的是什么“冗余”列,但可能您没有正确地处理它(如果您说它们是动态创建的)

    如果我是你,我会以不同的方式添加它们

    private void createColumns()
    {
        // First, dipose any previously created columns
        for (TableColumn column : table.getColumns())
             column.dispose();
    
        // Then recreate them
        for (MyColumnPO col : getColumns())
        {
             TableColumn newCol = new TableColumn(table, SWT.NONE); 
             newCol.setText( col.text );
             newCol.setWidth( col.width );
        }
    }
    

    MyColumnPO将是一个POJO,代表“我的列表示对象”。这包含有关列的信息(文本、宽度、工具提示)

    现在,在getColumns()方法中,添加/创建/删除/更新所需的列,实例化MyColumnPO对象,并将它们添加到将返回的List

    每次需要动态地重新创建列时,调用createColumns()