1

上部に入力バーがあり、下部にTableViewerがあるビューがあるEclipseプラグインビューを構築しようとしています。現在、より大きなコンポジット内に 2 つの別個のコンポジットを構築しようとしていますが、個々のコンポジットのそれぞれのサイズを制御するのに苦労しています。ここにいくつかのコードがあります:

public void createPartControl(Composite parent) {
        
        FillLayout parentLayout = new FillLayout(SWT.VERTICAL);
        parent.setLayout(parentLayout);
        
        Composite composite = new Composite(parent, SWT.BORDER);
        composite.setLayout(new FillLayout());
        viewer = new TableViewer(composite, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
        
        Composite composite2 = new Composite(parent, SWT.BORDER);
        
        
        GridLayout gridLayout = new GridLayout();
        composite2.setLayout(gridLayout); 
        
        GridData expGridData = new GridData();
        expGridData.horizontalAlignment = GridData.FILL;
        expGridData.grabExcessHorizontalSpace = true;
        expGridData.grabExcessVerticalSpace = true;
        Label expLabel = new Label(composite2, SWT.NONE);
        expLabel.setText("Express");
        Text exp = new Text(composite2, SWT.BORDER);
        exp.setLayoutData(expGridData); 
}

どちらも親コンポジットに存在するコンポジット1のサイズを大きくしながら、コンポジット2を縮小しようとしています。FillLayout とコンポジット自体のメソッドを調べてみましたが、うまくいくものは見つかりませんでした。

助けてくれてありがとう

4

2 に答える 2

3

これを試してください:)

public void createPartControl(Composite parent) {
    GridData parentData = new GridData(SWT.FILL, SWT.FILL, true, true);
    parent.setLayout(new GridLayout(1, true));
    parent.setLayoutData(parentData);

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

    Text searchText = new Text(searchMenu, SWT.NONE);
    searchText.setLayoutData(new GridData(SWT.FILL, GridData.CENTER, true, false));
    searchText.setText("search text here");

    Button searchButton = new Button(searchMenu, SWT.PUSH);
    searchButton.setText("Search");

    Composite tableViewerComposite = new Composite(parent, SWT.BORDER);
    tableViewerComposite.setLayout(new GridLayout(1, true));
    tableViewerComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    TableViewer tableViewer = new TableViewer(tableViewerComposite);
    TableViewerColumn column = new TableViewerColumn(tableViewer, SWT.NONE);
    column.getColumn().setWidth(200);
    column.setLabelProvider(new ColumnLabelProvider(){

        @Override
        public String getText(Object element) {
            return element != null ? element.toString() : "null";
        }});

    tableViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    tableViewer.setContentProvider(ArrayContentProvider.getInstance());
    tableViewer.setInput(new String[]{"one", "two", "three"});

}
于 2012-07-17T13:27:55.013 に答える
0

FillLayout の JavaDoc の最初の文を引用します。

FillLayout は、最も単純なレイアウト クラスです。コントロールを単一の行または列にレイアウトし、それらを同じサイズに強制します。

したがって、そのレイアウトを使用する場合、composite と composite2 のサイズを制御することはできません。

GridLayout を使用してみて、composite2 の GridData に heightHint を設定できます。

しかし、IMO SWT でのレイアウトの最適なオプションはMiglayoutです。Miglayoutを取得すると、非常に強力で、おしゃべりなコードを必要とせず、実際に読みやすくなります。また、Swing にも使用できるため、一度習得すれば十分です。それを試してみてください。

于 2012-07-16T22:03:49.193 に答える