2016-09-15 18 views
0

Eclipse SWTでテーブルビューアを使用して、特に1つの3列目のみのコンボボックスを作成します。私は、コードをコンパイルするときアサーションに失敗しました:不明な列レイアウトデータ

私は今まで、[OK]をすべてやったと思います、しかし、私は取得エラー:

Error Msg

コード:

public void createPartControl(Composite parent) { 

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

    tableViewer = new TableViewer(tableComposite, SWT.MULTI | SWT.H_SCROLL 
      | SWT.V_SCROLL); 
    tableViewer.setContentProvider(ArrayContentProvider.getInstance()); 
    // TODO viewer.setLabelProvider(new ViewLabelProvider()); 
    table = tableViewer.getTable(); 
    // Table table = tableViewer.getTable(); 
    table.setHeaderVisible(true); 
    table.setLinesVisible(true); 

    String[] titles = { "Threat Name", "Category Name", "Status", 
      "Priority", "Description", "Justification" }; 
    int[] bounds = { 100, 100, 100, 100 }; 
    TableViewerColumn col = createTableViewerColumn(titles[2], bounds[2], 2); 
    col.setLabelProvider(new ColumnLabelProvider() { 
     @Override 
     public String getText(Object element) { 
      Dummy p = (Dummy) element; 
      return p.getValue(); 
     } 
    }); 
    col.setEditingSupport(new FirstValueEditingSupport(tableViewer)); 

} 


private SelectionAdapter getSelectionAdapter(final TableColumn column, 
     final int index) { 
    SelectionAdapter selectionAdapter = new SelectionAdapter() { 
     @Override 
     public void widgetSelected(SelectionEvent e) { 
      tableViewer.refresh(); 
     } 
    }; 
    return selectionAdapter; 
} 

private static class Dummy { 
    public String value; 

    public Dummy(String value) { 
     this.value = value; 
    } 

    public String getValue() { 
     return value; 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 
} 

public static class FirstValueEditingSupport extends EditingSupport { 

    private final TableViewer viewer; 
    private final CellEditor editor; 

    private final String[] possibleValues = { "Mitigated", 
      "Not Applicable", "Not Started", "Needs Investigation" }; 

    public FirstValueEditingSupport(TableViewer viewer) { 
     super(viewer); 
     this.viewer = viewer; 
     this.editor = new ComboBoxCellEditor(viewer.getTable(), 
       possibleValues); 
    } 

    @Override 
    protected CellEditor getCellEditor(Object element) { 
     return editor; 
    } 

    @Override 
    protected boolean canEdit(Object element) { 
     return true; 
    } 

    @Override 
    protected Object getValue(Object element) { 
     Dummy dummy = (Dummy) element; 

     int index = 0; 

     for (int i = 0; i < possibleValues.length; i++) { 
      if (Objects.equals(possibleValues[i], dummy.getValue())) { 
       index = i; 
       break; 
      } 
     } 

     return index; 
    } 

    @Override 
    protected void setValue(Object element, Object value) { 
     Dummy dummy = (Dummy) element; 

     int index = (Integer) value; 

     dummy.setValue(possibleValues[index]); 

     viewer.update(element, null); 
    } 
} 

private void fillRows(String shortdesc, String categ, String descp) { 
    System.out.println("fillRows call from above method."); 
    TableColumn status_Name_Col = tableViewer.getTable().getColumn(2); 
    System.out.println("**************** status_Name_Col ************ " 
      + status_Name_Col); 

    tableViewer 
      .addSelectionChangedListener(new ISelectionChangedListener() { 
       @Override 
       public void selectionChanged(
         SelectionChangedEvent selectionChangedEvent) { 
        StructuredSelection selection = (StructuredSelection) selectionChangedEvent 
          .getSelection(); 
        System.out.println(((Dummy) selection.getFirstElement()) 
          .getValue()); 
       } 
      }); 

    List<Dummy> elements = new ArrayList<>(); 
    for (int i = 0; i < Connection.Number_Of_Connection; i++) { 
     elements.add(new Dummy("First option")); 
    } 
    tableViewer.setInput(elements); 
    tableColumnLayout.setColumnData(status_Name_Col, new ColumnWeightData(
      1, true)); 
    tableViewerColumn.setEditingSupport(new FirstValueEditingSupport(
      tableViewer)); 
} 

質問: はどのように表示しますコンボボックス、特に1つの列のみ?

答えて

0

テーブル上にのすべてをに設定するまでは、TableViewerコールをしないでください。 setInputが呼び出される前に、すべてのコンテンツプロバイダ、ラベルプロバイダ、列レイアウト、編集サポートなどを設定する必要があります。

作成するすべての列に対してsetColumnDataも呼び出す必要があります。

+0

私はsetInputをsetEditingSupportの下に移動します。同じエラーが発生しました。 –

+0

また、作成したすべての列で 'setColumnData'を呼び出す必要があります。これを行った場合は、コードからはわかりません。 –

+0

@ greg-449:ありがとうございます。 –

関連する問題