我在尝试创建复合表列时遇到错误?
错误是: 错误来自Boundin的Arrayindexout:
当我使用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));
}
}
答案 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应用程序。