I have two jface TableViewers in my view, both defined two occupy the same amount of space vertically, or in other words, both defined to grab the Excess vertical space and to FILL the vertical alignment. This way, the view is correctly displayed, in a small screen the table with more input gets more space, however, in a bigger screen both tables get the same amount of space, that's fine:
However, since the input from the bottom table is the same everytime, what I really want is to make the bottom table to get only the amount of space necessary to display that input.. But I can't do it, I set the bottom table to not grab the excess vertical alignement, but what it does is this:
And then.. When I resize the window.. BAM, it displays correctly:
I can't understand this behavior.. Can somebody help? This is my code:
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));
}
}
}
}