【问题标题】:TableViewer Centered LayoutTableViewer 居中布局
【发布时间】:2016-03-30 22:32:03
【问题描述】:

所以现在我已经成功地在我的TitleAreaDialog 中添加了一个TableViewer
我正在尝试找出我遇到的一些布局问题。
我可以在 Dialog 窗口中控制 tableViewer 的布局和位置吗?
现在表格显示在右侧。
我希望它以我的父 Composite 为中心。
我可以在createDialogArea 方法中将 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;
 }

【问题讨论】:

    标签: swt jface


    【解决方案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。这应该让您了解如何解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-06
      • 2012-12-17
      相关资源
      最近更新 更多