【发布时间】:2020-10-21 19:37:52
【问题描述】:
我想使用 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, SWT.FILL, true, true));
Composite myComposite = new Composite(this.sashForm, SWT.NONE);
myComposite .setLayout(new GridLayout());
myComposite .setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, 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, SWT.FILL, true, 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)
{
}
此刻,我想要一张空桌子。但是通过这个实现,视图会显示,但标题(“Column 1”和“Column 2”)不显示。
【问题讨论】:
标签: java eclipse treeview jface