Eclipse JFace树-树表的空列名

问题描述

我想使用org.eclipse.jface.viewers.TableViewer在Java中创建树表。在我的视图类中,它扩展了org.eclipse.ui.part.ViewPart的重写方法doCreatePartControl()中,它具有以下功能:

    parent.setLayout(new GridLayout());
    Composite composite = new Composite(parent,SWT.NONE);
    composite.setLayout(new GridLayout());
    composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));      
    this.headers = Arrays.asList("Column 1","Column 2"); //headers is an ArrayList<String>

    this.sashForm = new SashForm(composite,SWT.NONE | SWT.VERTICAL);
    this.sashForm.setLayoutData(new GridData(SWT.FILL,true));
    Composite myComposite = new Composite(this.sashForm,SWT.NONE);     
    myComposite .setLayout(new GridLayout());
    myComposite .setLayoutData(new GridData(SWT.FILL,true));              
    this.myTree = new MyTree(myComposite,SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL,this,this.headers);

MyTree类扩展了org.eclipse.swt.widgets.Tree,其构造函数为:

public AdaptersTree(Composite parent,int style,IViewPart view,List<String> columns)
{
    super(parent,style);
    setLayoutData(new GridData(SWT.FILL,true));
    this.viewPart = view;
  
    this.treeViewer = new TreeViewer(this,SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
    this.treeViewer.setContentProvider(new MyTreeContentProvider());
   
    this.headers = columns;
    
    setHeaderVisible(true);
    setLinesVisible(true);

    for (String header : this.headers) // create columns names
    {
        TreeViewerColumn viewerColumn = new TreeViewerColumn(treeViewer,SWT.NONE);
        viewerColumn.getColumn().setWidth(150);
        viewerColumn.getColumn().setText(header);
        viewerColumn.setLabelProvider(new ColumnLabelProvider());
    }
    
    GridLayoutFactory.fillDefaults().generateLayout(this);

}

MyTreeContentProvider类是一个示例类,它实现了org.eclipse.jface.viewers.ITreeContentProvider接口:

class MyTreeContentProvider implements ITreeContentProvider {
@Override
public boolean hasChildren(Object element) {
    return false;
}

@Override
public Object getParent(Object element) {
    return null;
}

@Override
public Object[] getElements(Object inputElement) { // not important now
    if (input instanceof ITreeItem[]) {
        
    }
    return new ArrayList<Object>();
}

@Override
public Object[] getChildren(Object parentElement) {
    return null;
}

@Override
public void dispose()
{      
}

@Override
public void inputChanged(Viewer viewer,Object oldInput,Object newInput)
{   
}

此刻,我想要一个空表。但是,通过此实现,将显示视图,但不显示标题(“列1”和“列2”)。

解决方法

这里的问题是您使用的TreeViewer构造函数:

this.treeViewer = new TreeViewer(this,SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);

此构造函数在内部创建一个新的Tree。由于您已经创建了树,因此应该使用:

this.treeViewer = new TreeViewer(this);

还请注意,结尾处的GridLayoutFactory调用是不必要的。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...