如何解决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
调用是不必要的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。