要实现列自适应大小首先需要保证Table根据窗口拖动而改变大小。
Window中提供setShellStyle可以设置外壳样式。
构造一个新的自定义器对话框,在构造函数中添加setShellStyle(getShellStyle() | SWT.RESIZE);即可改变自定义对话框大小,如:
getShellStyle()返回外壳样式位。默认值为SWT.CLOSE|SWT.MIN|SWT.MAX|SWT.RESIZE
。
子类应该调用setShellStyle
来改变这个值,而不是重写此方法。
设置父级容器,包含table
设置table的布局样式,样式位new GridData(int)
来调整控制填充单元格水平和垂直和以适应剩余的水平和垂直空间。GridData.FILL_BOTH,表示水平和垂直方向都填充完全。等同new GridData(SWT.FILL, SWT.FILL, true, true)方法。
设置列自适应大小。
//新建一列
TableColumn tcxValue = new TableColumn(table, SWT.None, 1);
tcxValue.setText(Messages.getString("value"));
//初始化列的宽度
tcxValue.setWidth(200);
//监听事件,改变表格大小时触发改变列的宽度
// 当控件被移动或调整大小时触发
table.addControlListener(new ControlListener() {
@Override
public void controlResized(ControlEvent e) {
int width = table.getClientArea().width;
TableColumn column = table.getColumn(1);
column.setWidth(width - 100);
}
@Override
public void controlMoved(ControlEvent e) {
}
});
也可以使用一下方式:
table.addListener(SWT.Resize, new Listener() {
@Override
public void handleEvent(Event event) {
int width = table.getClientArea().width;
TableColumn column = table.getColumn(1);
column.setWidth(width - 100);
}
});