2015-03-04 2 views
0

У меня есть два jView TableViewers, на мой взгляд, оба заданные два занимают одинаковое пространство пространства по вертикали или, другими словами, оба определены для захвата избыточного вертикального пространства и для заполнения вертикального выравнивания. Таким образом, корректно отображается вид, в маленьком экране таблица с большим количеством ввода получает больше места, тем не менее, в большом экране обе таблицы получить тот же объем пространства, это нормально:Eclipse RCP tableViewer не отображается правильно

enter image description here

Однако, поскольку вход из нижней таблицы один и тот же каждый раз, я действительно хочу, чтобы нижняя таблица получала только объем пространства, необходимый для отображения этого ввода. Но я не могу этого сделать, я устанавливаю нижнюю таблицу, чтобы не захватывать избыточное вертикальное выравнивание, но что он делает:

enter image description here

А потом .. Когда я изменить размер окна .. БАМ, он показывает правильно:

enter image description here

Я не могу понять это поведение .. Может кто-нибудь помочь? Это мой код:

private void createTableViewers(Composite parent) { 

     // TABLE 1 
     Composite compositeTableImpostos = new Composite(parent, SWT.NONE); 
     compositeTableImpostos.setLayout(new FillLayout()); 
     compositeTableImpostos.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1)); 

     tableImpostos = createTableViewer(compositeTableImpostos, 
       InterfaceVARS.REGISTOCOLABORADORES_TABLEVIEWER_COLUMNSTYLE, 
       LabelVARS.REGISTOCOLABORADORES_TABLEVIEWER_COLUMN_TITLES, 
       InterfaceVARS.REGISTOCOLABORADORES_TABLEVIEWER_COLUMNSIZE, 
       InterfaceVARS.STYLE_TABLE_SINGLE); 

     tableImpostos.setContentProvider(contentProvider = new ImpostosContentProvider(tableImpostos)); 
     tableImpostos.setLabelProvider(new ImpostosLabelProvider()); 

     // TABLE 2 
     Composite compositeTableLinhasDespesa = new Composite(parent, SWT.NONE); 
     compositeTableLinhasDespesa.setLayout(new FillLayout()); 
     final GridData gridData2 = new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1); 
     compositeTableLinhasDespesa.setLayoutData(gridData2); 

     tableLinhasDespesa = createTableViewer(compositeTableLinhasDespesa, 
       InterfaceVARS.REGISTODESPESAS_TABLEVIEWER_COLUMNSTYLE, 
       LabelVARS.REGISTODESPESA_TABLEVIEWER_COLUMN_TITLES, 
       InterfaceVARS.REGISTODESPESAS_TABLEVIEWER_COLUMNSIZE, 
       InterfaceVARS.STYLE_TABLE_MULTI); 

     tableLinhasDespesa.setContentProvider(linhasContentProvider = new LinhasDespesaContentProvider(tableLinhasDespesa, contentProvider)); 
     tableLinhasDespesa.setLabelProvider(new LinhasDespesaLabelProvider()); 
    } 
public class CustomTableViewer { 

    //Viewer 
    private TableViewer tableViewer; 
    private TableColumnLayout tableViewerLayout; 

    //Columns 
    private String titles[]; 
    private int columnSize[]; 
    private int columnStyle[]; 


    public CustomTableViewer(Composite composite, int[] columnStyle, String titles[], int[] columnSize, int STYLE){ 

     this.titles = titles; 
     this.columnStyle = columnStyle; 
     this.columnSize = columnSize; 

     tableViewerLayout = new TableColumnLayout(); 
     Composite compositeTable = new Composite(composite, SWT.NONE); 
     compositeTable.setLayout(tableViewerLayout); 
     tableViewer = new TableViewer(compositeTable, STYLE); 

     Table table = tableViewer.getTable(); 
     table.setLinesVisible(true); 
     table.setHeaderVisible(true); 
     addTableViewerColumns(); 
     addTableViewerListeners(); 
    } 

    private void addTableViewerColumns() { 
     for(int index=0 ; index<titles.length ; index++) 
      createTableColumn(columnStyle[index], titles[index], columnSize[index], columnSize[index], true, true); 
    } 

    private TableViewerColumn createTableColumn(int STYLE, String title, int weight, int minWidth, boolean moveable, boolean resizable) { 
     TableViewerColumn viewerColumn = new TableViewerColumn(tableViewer, STYLE); 
     TableColumn column = viewerColumn.getColumn(); 
     column.setText(title); 
     column.setMoveable(moveable); 
     tableViewerLayout.setColumnData(column, new ColumnWeightData(weight, minWidth, resizable)); 
     return viewerColumn; 
    } 

    public void addTableViewerListeners() { 
     tableViewer.getTable().addControlListener(new ResizeListener(tableViewer)); 
    } 

    public TableViewer getTableViewer(){ 
     return tableViewer; 
    } 

    public class ResizeListener implements ControlListener { 

     private TableViewer tableViewer; 

     public ResizeListener(TableViewer tableViewer) { 
      this.tableViewer = tableViewer; 
     } 

     @Override 
     public void controlMoved(ControlEvent e) { 

     } 

     @Override 
     public void controlResized(ControlEvent e) { 
      TableColumn[] colunas = tableViewer.getTable().getColumns(); 
      for(int i=0; i<colunas.length; i++) { 
       tableViewerLayout.setColumnData(colunas[i], new ColumnWeightData(
         columnSize[i],columnSize[i], 
         true)); 
      } 
     } 
    } 

} 
+1

Попробуйте вызвать 'layout (true)' на родительском 'Composite' из таблиц после того, как вы вызвали' setInput' в таблицах. –

+0

Не работает, однако, макет (новый элемент управления [{tableLinhasDespesa.getControl()}) выполнил эту работу! : D Спасибо @ greg-449 – yat0

ответ

0

Вызов метода layout(new Control[] {tableViewer2.getControl()}) в родительском композит таблиц после setInput() называлась сделал работу!