【问题标题】:Eclipse JFace Tree - Empty column names for a Tree tableEclipse JFace 树 - 树表的空列名称
【发布时间】: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


    【解决方案1】:

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

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

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

    this.treeViewer = new TreeViewer(this);
    

    另请注意,最后的GridLayoutFactory 调用不是必需的。

    【讨论】:

    • 是的,我删除了 GridLayoutFactory,一切正常。我不得不改变方法,因为我需要使用内部 TreeContentProvider。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 2019-09-28
    相关资源
    最近更新 更多