1

我正在尝试构建一个 Eclipse 插件视图,其中我有一个视图,顶部有一个输入栏,底部有一个 TableViewer。目前我正在尝试在一个较大的复合材料中构建 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); 
}

我正在尝试缩小复合材料 2,同时增加复合材料 1 的大小,这两者都位于父复合材料中。我试过查看 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 是最简单的布局类。它将控件布置在单行或单列中,迫使它们具有相同的大小。

因此,当您使用该布局时,您无法控制复合和复合2 的大小。

您可以尝试使用 GridLayout,并在 Composite2 的 GridData 上设置 heightHint。

但是 IMO 在 SWT 中布局的最佳选择是Miglayout - 一旦你得到它,它就非常强大,不需要健谈的代码,而且实际上是可读的。由于您也可以将它用于 Swing,因此您只需学习一次。尝试一下。

于 2012-07-16T22:03:49.193 回答