2012-10-25 196 views
0

我将一列一列地添加到我的swt表格中。与设置SWT表格列的宽度

int totalwidth=0; 
for(String s:phoneErrs){ 
    TableColumn tblclmnError = new TableColumn(tablephone, SWT.CENTER); 
    tblclmnError.setText(s); 
    tblclmnError.pack(); 
    totalwidth+=tblclmnError.getWidth(); 
} 

并在此之后我想添加最后一列中,应填写 的剩余空间在表头。现在我已经添加了列的总宽度 ,我应该能够计算出我最后一列的宽度,并指定 是吧?但是如何?我试过

TableColumn tblclmnComment = new TableColumn(tablephone, SWT.CENTER); 
tblclmnComment.setWidth(tablephone.getSize().x-totalwidth); 
tblclmnComment.setText("Comment"); 

但它不工作。 getSize()返回0

+0

您是否在复合材料中创建过? –

+0

上包含更多东西的复合材料。 – boreas

+0

并存在问题所在。 –

回答

1

您可以通过在SWT.Resize事件类型上添加监听器来实现此目的。

public static void main(String[] args) { 
     final Display display = new Display(); 
     final Shell shell = new Shell(display); 
     shell.setLayout(new GridLayout(1, true)); 

     TableViewer viewer1 = getViewer(shell); 

     List<String> rows = new ArrayList<String>(); 
     rows.add("Row 1"); 
     rows.add("Row 2"); 

     viewer1.setInput(rows); 

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

    private static TableViewer getViewer(final Shell shell) { 
     TableViewer viewer = new TableViewer(shell, SWT.FULL_SELECTION 
       | SWT.H_SCROLL | SWT.V_SCROLL | SWT.NONE); 

     viewer.getTable().addListener(SWT.Resize, new Listener() { 

      @Override 
      public void handleEvent(Event event) { 


      Table table = (Table)event.widget; 
      int columnCount = table.getColumnCount(); 
      if(columnCount == 0) 
       return; 
      Rectangle area = table.getClientArea(); 
      int totalAreaWdith = area.width; 
      int lineWidth = table.getGridLineWidth(); 
      int totalGridLineWidth = (columnCount-1)*lineWidth; 
      int totalColumnWidth = 0; 
      for(TableColumn column: table.getColumns()) 
      { 
       totalColumnWidth = totalColumnWidth+column.getWidth(); 
      } 
      int diff = totalAreaWdith-(totalColumnWidth+totalGridLineWidth); 

      TableColumn lastCol = table.getColumns()[columnCount-1]; 

//check diff is valid or not. setting negetive width doesnt make sense. 
      lastCol.setWidth(diff+lastCol.getWidth()); 

      } 
     }); 

     viewer.setContentProvider(ArrayContentProvider.getInstance()); 

     viewer.getTable().setLayoutData(
       new GridData(SWT.FILL, SWT.FILL, true, true)); 

     TableViewerColumn col = new TableViewerColumn(viewer, SWT.NONE); 
     col.getColumn().setWidth(100); 
     col.getColumn().setText("Text Column"); 
     col.setLabelProvider(new ColumnLabelProvider() { 
      @Override 
      public void update(ViewerCell cell) { 
       cell.setText((String) cell.getElement()); 
      } 
     }); 

     col = new TableViewerColumn(viewer, SWT.NONE); 
     col.getColumn().setWidth(100); 
     col.getColumn().setText("Second Text Column"); 
     col.setLabelProvider(new ColumnLabelProvider() { 
      @Override 
      public void update(ViewerCell cell) { 
       cell.setText((String) cell.getElement()); 
      } 
     }); 


     viewer.getTable().setHeaderVisible(true); 

     return viewer; 
    } 
+0

谢谢!这样可行! – boreas