2013-03-08 51 views
1

我有一个问题,我现在无法解决我自己。在部分展开后避免树大小调整

我有一个RCP ViewPage包含两个部分。这些部分位于SashForm中,以便用户能够调整扩展部分的大小。在底部有一个树,初始化后它是空的。通过用户交互(即删除过滤器),树会被填充并且其中包含大量数据。如果用户现在折叠底部视图并再次展开,则树会重新调整大小,从而导致我的窗体中出现滚动条。我想要的是树形视图中的滚动条。

下面是这个视图是如何打造:

- ScrolledForm 
    - Form Body 
    - Sash 
     - Section 1 
     - Composite 
      - Some View 
     - Section 2 
     - Composite 
      - Tree 

我希望你明白我想要的目的。

更新:这里有一些源代码来玩。它使用表而不是树,但产生相同的问题。

public class MyPersonPageEditor extends FormPage { 

    public static final String ID = "some.ID"; 

    TableViewer tableViewer; 

    public MyPersonPageEditor(FormEditor editor) { 
     super(editor, ID, "Some Title"); 
    } 

    @Override 
    protected void createFormContent(IManagedForm managedForm) { 
     FormToolkit toolkit = managedForm.getToolkit(); 
     ScrolledForm form = managedForm.getForm(); 
     Composite formBody = form.getBody(); 
     formBody.setLayout(new GridLayout()); 

     form.setText("Some Title"); 
     toolkit.decorateFormHeading(form.getForm()); 

     SashForm sfForm = new SashForm(formBody, SWT.VERTICAL); 
     sfForm.setLayout(new GridLayout()); 
     sfForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 

     Section topSection = new Section(sfForm, Section.TITLE_BAR | Section.EXPANDED | Section.TWISTIE); 
     topSection.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 
     topSection.setText("Section 1 Title"); 
     Composite topSectionComposite = toolkit.createComposite(topSection); 
     topSectionComposite.setLayout(new GridLayout()); 
     toolkit.createLabel(topSectionComposite, "Just some content. Doesn't need to be much"); 
     Button btn = toolkit.createButton(topSectionComposite, "Create Table Content", SWT.PUSH); 
     btn.addSelectionListener(new SelectionListener() { 
      @Override 
      public void widgetSelected(SelectionEvent e) { 
       for (int i = 0 ; i < 10 ; i++) { 
        tableViewer.add("Element " + i); 
       } 
      } 

      @Override 
      public void widgetDefaultSelected(SelectionEvent e) { 

      } 
     }); 
     topSection.setClient(topSectionComposite); 

     Section bottomSection = new Section(sfForm, Section.TITLE_BAR | Section.EXPANDED | Section.TWISTIE); 
     bottomSection.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 
     bottomSection.setText("Section 2 Title"); 
     Composite bottomSectionComposite = toolkit.createComposite(bottomSection); 
     bottomSectionComposite.setLayout(new GridLayout()); 
     bottomSectionComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 
     bottomSection.setClient(bottomSectionComposite); 
     Table table = toolkit.createTable(bottomSectionComposite, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION | 
       SWT.V_SCROLL | SWT.H_SCROLL | SWT.RESIZE); 
     table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 
     table.setHeaderVisible(true); 

     tableViewer = new TableViewer(table); 
     tableViewer.add("New Element"); 
     new TableColumn(table, SWT.LEFT).setText("Spalte 1"); 

     TableLayout layoutDefault = new TableLayout(); 
     layoutDefault.addColumnData(new ColumnWeightData(1)); 
     table.setLayout(layoutDefault); 

     form.reflow(true); 
    } 
} 

如果您在开始后单击按钮,该表看起来就像左图。在折叠并展开第二部分后,它看起来像是正确的。

enter image description here

回答

0

- 确保该树具有SWT.H_SCROLL风格(如果我没记错),使得其具有最小尺寸(例如使用网格布局和的GridData设置到了minHeight X或与TableWrapLayout和资料表身高提示为X) - 如果您无法使其正常工作,请告诉我,我会尝试制作代码;此外,在布局的画面将是巨大的

+0

我编辑了我的问题,并提供了一些源代码来玩和一些截图 – 2013-03-13 15:39:45

1

这里是工作的代码:你只需要调整的树/表的大小,并确保它不会跨越的垂直空间跨度:

public void createPartControl(Composite parent) { 

    FormToolkit toolkit = new FormToolkit(parent.getDisplay()); 
    final ScrolledForm form = toolkit.createScrolledForm(parent); 
    Composite formBody = form.getBody(); 
    formBody.setLayout(new GridLayout()); 
    form.setText("Some Title"); 
    toolkit.decorateFormHeading(form.getForm()); 

    SashForm sfForm = new SashForm(formBody, SWT.VERTICAL); 
    sfForm.setLayout(new GridLayout()); 
    sfForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 

    //top section 
    Section topSection = new Section(sfForm, Section.TITLE_BAR | Section.EXPANDED | Section.TWISTIE); 
    topSection.setLayout(new GridLayout()); 
    topSection.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 
    topSection.setText("Section 1 Title"); 
    Composite topSectionComposite = toolkit.createComposite(topSection); 
    topSectionComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 
    topSectionComposite.setLayout(new TableWrapLayout()); 

    toolkit.createLabel(topSectionComposite, "Just some content. Doesn't need to be much"); 
    Button btn = toolkit.createButton(topSectionComposite, "Create Table Content", SWT.PUSH); 
    btn.addSelectionListener(new SelectionListener() { 

     @Override 
     public void widgetSelected(SelectionEvent e) { 
      for (int i = 0 ; i < 10 ; i++) { 
       tableViewer.add("Element " + i); 
      } 
      form.reflow(true); 
     } 

     @Override 
     public void widgetDefaultSelected(SelectionEvent e) { 

     } 
    }); 
    topSection.setClient(topSectionComposite); 

    //bottom section 
    Section bottomSection = new Section(sfForm, Section.TITLE_BAR | Section.EXPANDED | Section.TWISTIE); 
    bottomSection.setLayout(new GridLayout()); 
    bottomSection.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 
    bottomSection.setText("Section 2 Title"); 
    Composite bottomSectionComposite = toolkit.createComposite(bottomSection); 
    bottomSectionComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 
    bottomSectionComposite.setLayout(new TableWrapLayout()); 

    Table table = toolkit.createTable(bottomSectionComposite, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION | 
      SWT.V_SCROLL | SWT.H_SCROLL | SWT.RESIZE); 

    TableWrapData ttd222 = new TableWrapData(TableWrapData.FILL_GRAB, TableWrapData.FILL_GRAB); 
    ttd222.maxHeight =200; 
    table.setLayoutData(ttd222); 
    table.setHeaderVisible(true); 

    tableViewer = new TableViewer(table); 
    tableViewer.add("New Element"); 
    new TableColumn(table, SWT.LEFT).setText("Spalte 1"); 

    TableLayout layoutDefault = new TableLayout(); 
    layoutDefault.addColumnData(new ColumnWeightData(1)); 
    table.setLayout(layoutDefault); 

    bottomSection.setClient(bottomSectionComposite); 
    form.reflow(true); 
} 
相关问题