JFace + SWT Composite table 查看器

JFace + SWT Composite table viewer

当我尝试创建复合 table 列时出现错误?

错误是: 错误来自 Arrayindexout of Bound:

当我使用 Composite 时,应用程序没有启动:

import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.part.ViewPart;

 public class Theartview extends ViewPart implements Serializable {

   public void createPartControl(Composite parent) {

    Composite tableComposite = new Composite(parent, SWT.NONE);
    TableColumnLayout tableColumnLayout = new TableColumnLayout();
    tableComposite.setLayout(tableColumnLayout);
    tableComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,
            true));
  }
 }

您的代码所做的只是使用 TableColumnLayout 设置 table 的布局。您没有实际创建此布局将管理的 table。当你 运行 代码处于这种状态时,它会崩溃,因为它找不到 table.

所以您必须添加代码来创建 TableViewer,至少这可能类似于:

Composite tableComposite = new Composite(parent, SWT.NONE);
TableColumnLayout tableColumnLayout = new TableColumnLayout();
tableComposite.setLayout(tableColumnLayout);
tableComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

TableViewer viewer = new TableViewer(tableComposite, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
viewer.setContentProvider(ArrayContentProvider.getInstance());
// TODO viewer.setLabelProvider(new ViewLabelProvider());
viewer.setInput(new String[] {"One", "Two", "Three"});

我刚刚在此处显示了一个简单的 setInput,您需要对其进行更改。您可能还必须定义标签提供程序。

这个很简单table就是不使用列。您需要使用 TableViewerColumn 定义列以充分利用此布局。

注意: ViewPart 是插件中的 Eclipse 视图(可能是独立 RCP 的一部分)。它不是一个普通的 JFace + SWT 应用程序。