2017-12-26 19 views
0

テーブルビューアを編集可能にしたいです。私はsetEditingSupportとEdittingSupportを使うことにしました。しかし、テーブルの内容はsetterとgetterを持たない文字列配列に格納されます。クラスのgetValue()とsetValue()でコードを書く方法は、EditingSupportを拡張しますか? TableViewerののコードは以下を示しています。テーブルビューアを編集可能な文字列配列アイテム

public class DatatypePage extends WizardPage 

{

public static final String NAME = "type"; 
private MigratorWizard wizard; 

private TableViewer tableViewer; 

protected DatatypePage(MigratorWizard wizard) 
{ 
    super(NAME); 
    this.wizard = wizard; 
    setTitle("Data Type"); 
    setDescription("This is a data type page"); 
} 

@Override 
public void createControl(Composite parent) 
{ 
    Composite compositeContent = new Composite(parent, SWT.NONE); 
    setControl(compositeContent); 

    //super.createControl(parent); 
    //updatePage(rbtnDatatype); 

    compositeContent.setLayout(new FormLayout()); 

    Button btnEditConstraint = new Button(compositeContent, SWT.NONE); 
    FormData fd_btnEditConstraint = new FormData(); 
    fd_btnEditConstraint.left = new FormAttachment(0, 287); 
    btnEditConstraint.setLayoutData(fd_btnEditConstraint); 
    btnEditConstraint.setText("Edit Constraint"); 

    Button btnAddConstraint = new Button(compositeContent, SWT.NONE); 
    fd_btnEditConstraint.top = new FormAttachment(btnAddConstraint, 0, SWT.TOP); 
    fd_btnEditConstraint.right = new FormAttachment(btnAddConstraint, -63); 
    FormData fd_btnAddConstraint = new FormData(); 
    fd_btnAddConstraint.bottom = new FormAttachment(100); 
    fd_btnAddConstraint.left = new FormAttachment(0, 500); 
    btnAddConstraint.setLayoutData(fd_btnAddConstraint); 
    btnAddConstraint.setText("Add Constraint"); 
    btnAddConstraint.addSelectionListener(new SelectionAdapter() { 
     @Override 
     public void widgetSelected(SelectionEvent e) { 

     } 
    }); 

    Button btnDeleteConstraint = new Button(compositeContent, SWT.NONE); 
    fd_btnAddConstraint.right = new FormAttachment(btnDeleteConstraint, -60); 

    FormData fd_btnDeleteConstraint = new FormData(); 
    fd_btnDeleteConstraint.left = new FormAttachment(0, 710); 
    fd_btnDeleteConstraint.right = new FormAttachment(100, -2); 
    fd_btnDeleteConstraint.bottom = new FormAttachment(100); 
    btnDeleteConstraint.setLayoutData(fd_btnDeleteConstraint); 
    btnDeleteConstraint.setText("Delete Constraint"); 

    btnDeleteConstraint.addSelectionListener(new SelectionAdapter() { 
     @Override 
     public void widgetSelected(SelectionEvent e) { 
      ISelection selection = tableViewer.getSelection(); 
      logger.debug("datatype selected"); 
      if (selection != null || selection instanceof IStructuredSelection) { 
       IStructuredSelection sel = (IStructuredSelection) selection; 
       Iterator iterator = sel.iterator(); 
       while(iterator.hasNext()) { 
        Object obj = iterator.next(); 
        tableViewer.remove(obj); 
       } 


      } 

     } 
    }); 


    tableViewer = new TableViewer(compositeContent, SWT.MULTI | SWT.H_SCROLL 
      | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER); 
    Table table = tableViewer.getTable(); 
    FormData fd_table = new FormData(); 
    fd_table.bottom = new FormAttachment(btnEditConstraint, -6); 
    fd_table.top = new FormAttachment(0); 
    fd_table.left = new FormAttachment(0); 
    fd_table.right = new FormAttachment(100); 
    table.setLayoutData(fd_table); 
    table.setHeaderVisible(true); 
    table.setLinesVisible(true); 

    TableViewerColumn tcolOracle = new TableViewerColumn(tableViewer, SWT.NONE); 
    TableColumn tcOracle = tcolOracle.getColumn(); 
    tcOracle.setText("oracle"); 
    tcOracle.setWidth(300); 
    tcolOracle.setLabelProvider(new ColumnLabelProvider() { 
     @Override 
     public String getText(Object element) { 
      String[] t = (String[]) element; 
      return t[0]; 
     } 
    }); 
    tcolOracle.setEditingSupport(new FirstColEdittingSupport(tableViewer)); 

    TableViewerColumn tcolHighgo = new TableViewerColumn(tableViewer, SWT.NONE); 
    TableColumn tcHighgo = tcolHighgo.getColumn(); 
    tcHighgo.setText("hgdb"); 
    tcHighgo.setWidth(300); 
    tcolHighgo.setLabelProvider(new ColumnLabelProvider() { 
     @Override 
     public String getText(Object element) { 
      String[] t = (String[]) element; 
      return t[1]; 
     } 
    }); 


    initConfig(); 


} 

private void initConfig() 
{ 
    tableViewer.setContentProvider(new ArrayContentProvider()); 
    //tableViewer.setInput(DataTypeFactory.getInstance().getCastList(wizard.getSourceInfo().getDBType())); 
    // make the selection available to other views 
    // getSite().setSelectionProvider(tableViewer); 
} 


public void update() 
{ 
    logger.debug("sourceDB=" + wizard.getSourceInfo().getDBType()); 
    tableViewer.setInput(DataTypeFactory.getInstance().getCastList(wizard.getSourceInfo().getDBType())); 
    logger.debug("dataType = "+ wizard.getSourceInfo().getDBType()); 
    tableViewer.refresh(); 

    // tableViewer.getTable().selectAll(); 
} 

}

+1

いくつかのコードを教えてください。 – Aman

+0

このメソッドはリストを返す DataTypeFactory.getInstance()。getCastList(wizard.getSourceInfo()。getDBType()) – khunnie

答えて

1

あなたはそれだけで文字列配列を使用しないように、入力の設計を変更する必要があります。列データを含む各行にクラスを使用し、そのクラスにgetおよびsetメソッドを追加します。

setInputに渡すデータをこのクラスを使用するように変更するか、カスタムコンテンツプロバイダを使用して変換を行うことができます。

+0

あなたの返事をありがとう。つまり、データを取得するために使用したメソッドを呼び出す代わりに、データ・リソース用の新しいクラスを作成する必要がありますか? – khunnie

+0

あなたがこれを行う場所はあなた次第です。 'getCastList'を変更して行クラスのリストを返すこともできますし、' setInput'を呼び出す前にリストを変更したり、コンテンツプロバイダにクラスインスタンスを作成させることもできます。それは単にあなたがプログラムで最も理にかなっているかどうかによって異なります。 –

+0

もう一度ありがとうございます。しかし、別の質問があります。文字列配列に格納されたデータにはマッピング関係があります。リストを変更する場合、この関係を維持する方法は? – khunnie

関連する問題