2012-02-09 3 views
4

У меня есть эта таблица в Eclipse SWT с 5 столбцами. Я изменяю размер окна и вместе с тем всю таблицу, но столбцы не изменяются, чтобы заполнить все свободное пространство.Измените размер столбца таблицы, чтобы заполнить все свободное пространство

Есть ли способ компоновки, который я могу использовать для того, чтобы изменить размер столбца для заполнения всего доступного пространства? Я нашел код, который позволяет изменять размеры столбцов при изменении размера клиентского пространства, но для меня это кажется небольшим взломом.

Должно быть, это достойный элегантный способ сделать это, используя сам макет.

ответ

5

Это может пригодиться:

Composite tableComposite = new Composite(parent, SWT.NONE); 
TableViewer xslTable = new TableViewer(tableComposite, SWT.SINGLE | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL); 
xslTable.getTable().setLinesVisible(true); 
xslTable.getTable().setHeaderVisible(true); 
TableViewerColumn stylesheetColumn = new TableViewerColumn(xslTable, SWT.NONE); 
stylesheetColumn.getColumn().setText(COLUMN_NAMES[0]); 
stylesheetColumn.getColumn().setResizable(false); 
TableViewerColumn conceptColumn = new TableViewerColumn(xslTable, SWT.NONE); 
conceptColumn.getColumn().setText(COLUMN_NAMES[1]); 
conceptColumn.getColumn().setResizable(false); 
TableColumnLayout tableLayout = new TableColumnLayout(); 
tableComposite.setLayout(tableLayout); 

layoutTableColumns(); 

layoutTableColumns метод

/** 
    * Resize table columns so the concept column is packed and the stylesheet column takes the rest of the space 
    */ 
    private void layoutTableColumns() 
    { 
    // Resize the columns to fit the contents 
    conceptColumn.getColumn().pack(); 
    stylesheetColumn.getColumn().pack(); 
    // Use the packed widths as the minimum widths 
    int stylesheetWidth = stylesheetColumn.getColumn().getWidth(); 
    int conceptWidth = conceptColumn.getColumn().getWidth(); 
    // Set stylesheet column to fill 100% and concept column to fit 0%, but with their packed widths as minimums 
    tableLayout.setColumnData(stylesheetColumn.getColumn(), new ColumnWeightData(100, stylesheetWidth)); 
    tableLayout.setColumnData(conceptColumn.getColumn(), new ColumnWeightData(0, conceptWidth)); 
    } 
+0

Вот еще один отрывок: http://www.volanakis.de/nuggets/Snippet77withTableColumnLayout.java –

+2

Этот ответ был бы лучше, если бы он начал с какой-то резюме. Например: «* Это можно решить, используя« TableLayout »и ... blah, blah *». – Lii

+0

Большое спасибо, работает как шарм! – Markus

1

Это то, что я пытался, и это работает отлично.

viewer.getControl().addControlListener(new ControlListener() { 

     @Override 
     public void controlResized(ControlEvent arg0) { 
      Rectangle rect = viewer.getTable().getClientArea(); 
      if(rect.width>0){ 
       int extraSpace=rect.width/4; 
       col1.getColumn().setWidth(extraSpace); 
       col2.getColumn().setWidth(extraSpace); 
       col3.getColumn().setWidth(extraSpace); 
       col4.getColumn().setWidth(extraSpace); 
      } 
     } 

     @Override 
     public void controlMoved(ControlEvent arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 
+0

Спасибо за это решение. Сохранено много времени. –

Смежные вопросы