2016-12-12 6 views
-1

각 트리마다 n 개의 Tree를 가질 수있는 TitleAreaDialog가 있습니다. 각 트리에는 자체 합성이 있습니다. 만약 내가 단지 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 번 - 정확히 한 번 호출해야합니다. this.dialogArea도 반환했습니다. super.createDialogArea이 반환 한 값을 반환해야합니다.