我的视图中有两个jface TableViewers,它们都定义了两个垂直方向占用相同空间的jface,或者换句话说,它们都定义为获取多余的垂直空间并填充垂直对齐。这样,视图才能正确显示,在小屏幕上,输入越多的表格就会获得更多的空间,而在大屏幕上,两个表格就会获得相同的空间,这很好:

但是,由于来自底部表格的输入每次都是相同的,所以我真正想要的是让底部表格只获得显示该输入所需的空间量。但我不能这样做,我设置了底部的桌子不抓住多余的垂直对齐,但它做的是这样的:

然后..。当我调整窗口大小时。BAM,它可以正确显示:

我不能理解这种行为..有人能帮帮忙吗?这是我的代码:
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));
}
}
}
}发布于 2015-03-05 03:53:09
在调用setInput()之后,在表的父组合中调用layout(new Control[] {tableViewer2.getControl()})方法就完成了这项工作!
https://stackoverflow.com/questions/28854699
复制相似问题