1

しばらく自分で解決できなかった質問があります。

2 つのセクションを含む RCP ViewPage があります。セクションは SashForm 内にあるため、ユーザーは展開されたセクションのサイズを変更できます。下部のセクションには、初期化後に空のツリーがあります。ユーザーの操作 (つまり、フィルターの削除) によって、ツリーがいっぱいになり、多くのデータが含まれます。ユーザーが下部ビューを折りたたんで再度展開すると、ツリーのサイズが変更され、フォームに ScrollBars が発生します。私が欲しいのは、ツリービューのスクロールバーです。

ビューの作成方法は次のとおりです。

- 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);
    }
}

開始後にボタンをクリックすると、テーブルは左の写真のようになります。2 番目のセクションを折りたたんで展開すると、正しいセクションのようになります。

ここに画像の説明を入力

4

2 に答える 2

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);
}
于 2013-03-20T13:09:25.167 に答える
0

-ツリーにSWT.H_SCROLLスタイルがあることを確認してください(私の記憶が正しければ)、最小サイズがあります(たとえば、GridLayoutとGridDataでminHeightをXに設定するか、TableWrapLayoutとTableDataのheightHintでXに設定します)それを機能させることができませんでした。教えてください。コードを作成してみます。また、レイアウト付きの写真は素晴らしいでしょう

于 2013-03-11T13:33:16.973 に答える