2016-12-12 21 views
-1

TitleAreaDialogにはn個のTreeを持つことができます。各ツリーには独自のコンポジットがあります。私はちょうど2つの木を持っている場合、ダイアログは素晴らしいように見えますが、木の数が増えれば、木の内容は切り捨てられています。私はここ..TitleAreaDialogのコントロールのサイズを動的に調整する方法

を小さな何かを逃したと思います

はコードです:

import org.eclipse.draw2d.ColorConstants; 
import org.eclipse.jface.dialogs.TitleAreaDialog; 
import org.eclipse.jface.viewers.TreeViewer; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.custom.SashForm; 
import org.eclipse.swt.events.DisposeEvent; 
import org.eclipse.swt.events.DisposeListener; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Composite; 
import org.eclipse.swt.widgets.Control; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Label; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.widgets.TreeItem; 


public class testTitleDialog extends TitleAreaDialog { 

private static final String DIALOG_TITLE = "TITLE AREA DIALOG"; 

Composite area; 

public testTitleDialog(Shell parentShell) { 
    super(parentShell); 
} 

@Override 
public void create() { 
    super.create(); 
    setTitle("TITLE WILL BE HERE"); 
} 

@Override 
protected Control createDialogArea(final Composite parent) { 
    this.area = (Composite) super.createDialogArea(parent); 
    parent.getShell().setText(DIALOG_TITLE); 
    Composite area = (Composite) super.createDialogArea(parent); 

    Composite contents = (Composite) super.createDialogArea(area); 
    contents.setLayout(new GridLayout()); 
    contents.setLayoutData(new GridData(GridData.FILL_BOTH)); 
    contents.addDisposeListener(new DisposeListener(){ 
     public void widgetDisposed(DisposeEvent e) { 
     } 
    }); 
    createMapperComposite(contents); 
    return this.dialogArea; 
} 

private void createMapperComposite(Composite composite) { 
    Composite main = new Composite(composite, SWT.NONE); 
    main.setLayout(new GridLayout()); 
    main.setLayoutData(new GridData(GridData.FILL_BOTH)); 

    treeMapper(main); 

} 

private Composite treeMapper(Composite main) { 
    SashForm sashForm = new SashForm(main, SWT.HORIZONTAL); 

    Composite composite = new Composite(sashForm, SWT.NONE); 
    composite.setLayout(new GridLayout()); 
    composite.setLayoutData(new GridData(GridData.FILL_BOTH)); 
    composite.setBackground(ColorConstants.white); 


    //i is number of trees 
    for (int i = 0; i < 10; i++) { 

     Label lbl = new Label(composite, SWT.NONE); 
     lbl.setText("Tree " + i); 

     // Add content to scrolled composite 
     Composite scrolledContent = new Composite(composite, SWT.NONE); 
     scrolledContent.setLayout(new GridLayout()); 
     GridData gridData = new GridData(); 
     gridData.horizontalAlignment = SWT.FILL; 
     gridData.grabExcessHorizontalSpace = true; 
     gridData.verticalAlignment = SWT.FILL; 
     gridData.grabExcessVerticalSpace = true; 
     scrolledContent.setLayoutData(gridData); 

     final TreeViewer tree = new TreeViewer(scrolledContent); 
     for(int loopIndex0 = 0; loopIndex0 < 10; loopIndex0++) { 
      TreeItem treeItem0 = new TreeItem(tree.getTree(), 0); 
      treeItem0.setText("Level 0 Item "+ loopIndex0); 

      for(int loopIndex1 = 0; loopIndex1 < 10; loopIndex1++) { 
       TreeItem treeItem1 = new TreeItem(treeItem0, 0); 
       treeItem1.setText("Level 1 Item "+ loopIndex1); 

       for(int loopIndex2 = 0; loopIndex2 < 10; loopIndex2++) { 
        TreeItem treeItem2 = new TreeItem(treeItem1, 0); 
        treeItem2.setText("Level 2 Item "+ loopIndex2); 
       } 
      } 
     } 

     tree.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 


    } 

    new TreeViewer(sashForm); 
    return main; 
} 

@Override 
protected boolean isResizable() { 
    return true; 
} 

@Override 
protected void okPressed() { 
    super.okPressed(); 
} 



public static void main(final String[] args) { 
    Display display = new Display(); 
    Shell shell = new Shell(display); 
    new testTitleDialog(shell).open(); 
} 

}

+0

独自のTreeItemを作成する場合は、Tree **を使用しないでください。** TreeViewer - コンテンツプロバイダとラベルプロバイダでTreeViewerを使用する必要があります。 –

+0

@ greg-449私はTreeViewer用にコンテンツプロバイダとラベルプロバイダを使用していますが、私の問題を実証することが重要ではないと思っています。私はいくつかの並べ替えのレイアウトの問題があると思う。 –

答えて

0

あなたはダイアログが表示から大きすぎることに対処するために何もしていません。あなたはこれに対処するためにScrolledCompositeのようなものを使用する必要があります。

@Override 
protected Control createDialogArea(final Composite parent) { 
    Composite area = (Composite) super.createDialogArea(parent); 
    parent.getShell().setText(DIALOG_TITLE); 

    ScrolledComposite scrolled = new ScrolledComposite(area, SWT.V_SCROLL | SWT.H_SCROLL); 

    GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); 
    data.heightHint = 500; 
    scrolled.setLayoutData(data); 

    scrolled.setExpandHorizontal(true); 
    scrolled.setExpandVertical(true); 

    createMapperComposite(scrolled); 

    return area; 
} 

private void createMapperComposite(ScrolledComposite composite) { 
    Composite main = new Composite(composite, SWT.NONE); 
    main.setLayout(new GridLayout()); 
    main.setLayoutData(new GridData(GridData.FILL_BOTH)); 

    treeMapper(main); 

    composite.setContent(main); 
    composite.setMinSize(main.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 
} 

注:あなたはこの仕事をするために(data.heightHint = 500を参照)ダイアログの高さを選択する必要があります。

あなたのコードはsuper.createDialogAreaと3つの回と呼ばれます。これは1回だけ呼び出される必要があります。 this.dialogAreaも返されました。返される値はsuper.createDialogAreaです。

関連する問題