2016-09-09 104 views
0

我得到錯誤當我嘗試創建複合表格列?JFace + SWT複合表格查看器

錯誤是: 錯誤來束縛Arrayindexout: Error Come Arrayindexout of Bound image1

應用程序不啓動,當我走複合式: 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)); 
    } 
} 
+0

ViewPart表示這是一個Eclipse插件,可能位於RCP中,不僅僅是SWT + JFace。 –

回答

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應用程序。