0

所以现在我已经成功地TableViewer在我的TitleAreaDialog.
我试图找出我遇到的一些布局问题。
我可以在 Dialog 窗口中控制 tableViewer 的布局和位置吗?
现在表格显示在右侧。
我希望它以我的父 Composite 为中心。
我可以在createDialogArea方法中将 TableViewer 添加到父布局吗?我将在对话框中添加更多合成物,并希望能够控制它们的去向和外观。另外我的表格在表格末尾显示了一个半空列,有没有办法删除它?

带有 TableViewer 的对话框

就像是:

GridData gridData = new GridData();
gridData.grabExcessHorizontalSpace = true;
gridData.horizontalAlignment = GridData.CENTER;
TableViewer d = createTableViewer(area);
d.setLayoutData(gridData);

这是我的 createDialogArea 代码。

protected Control createDialogArea(Composite parent) {
   final Composite area = new Composite(parent, SWT.NULL);
   final GridLayout gridLayout = new GridLayout();
   gridLayout.marginWidth = 15;
   gridLayout.marginHeight = 10;
   area.setLayout(gridLayout);

   TableViewer d = createTableViewer(area);

   return area;
}

这是我的表格查看器代码

 private TableViewer createTableViewer(Composite parent) {
    viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
    createColumns(parent, viewer);
    final Table table = viewer.getTable();
    table.setHeaderVisible(true);
    table.setLinesVisible(true);

    viewer.setContentProvider(new ArrayContentProvider());
    viewer.setInput(AplotSelectedDataTable.getInstance().getArrayData());

    // Layout the viewer
    GridData gridData = new GridData(SWT.CENTER);
    gridData.verticalAlignment = GridData.FILL;
    gridData.horizontalSpan = 2;
    gridData.grabExcessHorizontalSpace = true;
    gridData.grabExcessVerticalSpace = true;
    gridData.horizontalAlignment = GridData.FILL;
    viewer.getControl().setLayoutData(gridData);
  return viewer;
 }
4

1 回答 1

1

这是一个可以帮助您解决布局问题的小示例:

public class TestClass extends Dialog {

    private TableViewer viewer;

    protected TestClass(Shell parentShell) {
        super(parentShell);
    }

    protected Control createDialogArea(Composite parent) {
        final Composite area = new Composite(parent, SWT.NONE);
        final GridLayout gridLayout = new GridLayout(2, true);
        gridLayout.marginWidth = 15;
        gridLayout.marginHeight = 10;
        area.setLayout(gridLayout);

        area.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        createButtons(area);
        createTableViewer(area);

        return area;
    }

    private void createButtons(Composite parent)
    {
        Button button1 = new Button(parent, SWT.PUSH);
        button1.setText("Button1");
        button1.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, true));

        Button button2 = new Button(parent, SWT.PUSH);
        button2.setText("Button2");
        button2.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, true));
    }

    private void createTableViewer(Composite parent) {
        viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
                | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
        createColumns(parent);
        final Table table = viewer.getTable();
        table.setHeaderVisible(true);
        table.setLinesVisible(true);

        viewer.setContentProvider(new ArrayContentProvider());

        // Layout the viewer
        GridData gridData = new GridData(SWT.CENTER, SWT.FILL, true, true);
        gridData.horizontalSpan = 2;
        table.setLayoutData(gridData);
    }

    private void createColumns(Composite parent)
    {
        TableViewerColumn viewerColumn = new TableViewerColumn(viewer, SWT.NONE);
        final TableColumn column = viewerColumn.getColumn();
        column.setText("Title");
        column.setWidth(100);
        column.setResizable(true);
        column.setMoveable(false);
    }

    public static void main(String[] args) {
        Display display = Display.getDefault();
        final Shell shell = new Shell(display);

        TestClass test = new TestClass(shell);

        test.open();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }
}

它基本上创建了一个Dialog顶部有 2 个按钮和下方居中 TableViewer的小按钮。这应该让您了解如何解决您的问题。

于 2012-08-29T19:53:02.410 回答