2016-05-30 21 views
1

ここに私の問題があります。私はSWTを使ってEclise Plugin用の小さなGUIを構築しています。下の写真では、部品1,2,2 '、3,3'は私が望むのと全く同じように動作し、ウィンドウに正しく収まります。SWTコンポーネント(TextMergeViewer)のサイズを変更できません

Sample screenshot of what the GUI could look like

はしかし、(TextMergeViewerである)第四の部分は、そのコンテナの隅に、それはほとんどのサイズを保持します。

次のコードは、どのように、例えば、私は部品2と2' を定義しています示しています

Composite viewersContainer; 
    viewersContainer = new Composite(shell, SWT.BORDER); 
    viewersContainer.setLayout(new GridLayout(2, false)); 
    viewersContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 

    data = new GridData(SWT.FILL, SWT.FILL, true, true); 
    data.heightHint = 400; 
    data.widthHint = 400; 

    oldFileViewer = new Browser(viewersContainer, SWT.BORDER); 
    oldFileViewer.setText("here is the old file viewer\t\t\t\t\t\t\t\t\t\n\n\n\n\n\n"); 
    oldFileViewer.setLayoutData(data); 

    newFileViewer = new Browser(viewersContainer, SWT.BORDER); 
    newFileViewer.setText("and here is the new file viewer\t\t\t\t\t\t\t\t\t\n\n\n\n\n\n"); 
    newFileViewer.setLayoutData(data); 

私は第四の部分を作成しながら、次のコードを使用して、そのモデルを維持しようとした:

Composite c = new Composite(shell, SWT.BORDER); 
    c.setLayout(new GridLayout(1, false)); 
    GridData l = new GridData(SWT.FILL, SWT.FILL, false, false); 
    c.setLayoutData(l); 

    TextMergeViewerCreator tmvc = new TextMergeViewerCreator(); 

    TextMergeViewer tmv = null; 

    tmv = (TextMergeViewer) tmvc.createViewer(c, new CompareConfiguration()); 


    DiffNode d = null; 
    try { 
     d = (DiffNode) (new CompareInput().prepareInput(new IProgressMonitor() { 
      //Some overrided methods 

      } 
     })); 
    } catch (InvocationTargetException | InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    d.setDontExpand(false); 
    tmv.setInput(d); 

DiffNodeはTextMergeViewerファイルの責任を負いませんが、私のコードで何が間違っているのかはわかりません。 ご協力いただければ幸いです! 読んでいただきありがとうございます。

答えて

2

あなたはTextMergeViewerControlGridDataを設定する必要があります。

tmv.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 

また、メモとして:GridDataオブジェクトを再使用しないでください。各ウィジェットは独自のGridDataを持つ必要があります。

Reference

注:GridDataはオブジェクト再使用しないでください。 GridLayoutによって管理されるコンポジット内のすべてのコントロールには、一意のGridDataオブジェクトが必要です。

+1

TextMergeViewerには 'setLayoutData'メソッドがありません。 – MedAl

+1

@MedAl' getControl() 'の結果で呼び出すようにしてください。 – Baz

関連する問題