JFace + SWT复合表查看器

时间:2016-09-09 06:04:33

标签: swt jface composite tableviewer

我在尝试创建复合表列时遇到错误?

错误是: 错误来自Boundin的Arrayindexout: Error Come Arrayindexout of Bound image1

当我使用Composite时,应用程序无法启动: Application does not start when I take Composite image2

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));
  }
 }

1 个答案:

答案 0 :(得分:1)

您的所有代码都在使用TableColumnLayout为表格设置布局。您没有采取任何措施来实际创建此布局将管理的表。当您在此状态下运行代码时,它会崩溃,因为它无法找到该表。

所以你必须添加代码来创建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,你需要改变它。您可能还需要定义标签提供者。

这个非常简单的表没有使用列。您需要使用TableViewerColumn定义列以充分利用此布局。

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