2012-08-27 79 views
0

因此,現在我已在TitleAreaDialog中成功添加TableViewer
我想弄清楚我有一些佈局問題。
我可以在我的對話框窗口中控制tableViewer的佈局和位置。
現在表格顯示在右側。
我希望它在我的父母複合中居中。
我可以將TableViewer添加到createDialogArea方法中的父佈局中嗎? 我將在對話框中添加更多複合材料,並希望能夠控制它們的位置以及它們的外觀。 另外我的表格在表格末尾顯示了一個半空列,有沒有辦法刪除它?TableViewer居中佈局

Dialog w/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; 
} 

這裏是我的TableViewer的代碼

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

回答

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。這應該給你一個關於如何解決你的問題的想法。