wizardpage区域下部总是会有相当大的一块区域出于空白,拖动窗口减小后高度那块区域仍然存在,会挤压正常的page区域,后来通过各种设置都不能改变,这种现象的主要原因就是在wizard模板中存在有一个ProgressIndicator控件占据了该块区域,即使不显示,这块区域也会被占用在WizardDialog中,看源码
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDialogArea(parent);
// Build the Page container
pageContainer = createPageContainer(composite);
GridData gd = new GridData(GridData.FILL_BOTH);
gd.widthHint = pageWidth;
gd.heightHint = pageHeight;
pageContainer.setLayoutData(gd);
pageContainer.setFont(parent.getFont());
// Insert a progress monitor
progressMonitorPart= createProgressMonitorPart(composite, new GridLayout());
GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
progressMonitorPart.setLayoutData(gridData);
progressMonitorPart.setVisible(false);
// Build the separator line
Label separator = new Label(composite, SWT.HORIZONTAL | SWT.SEPARATOR);
separator.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
applyDialogFont(progressMonitorPart);
return composite;
}
效果是这样,黑框里的就是空白区域
其中progressMonitorPart 就是占空间的控件,虽然源码设置成默认不可见,但他还是牢牢占了这块区域,查了一下资料有人说只能重写这段源码注掉那部分内容,想了想也太不友好了,经过尝试,发现可以在子类中得到这个控件,让他不计算位置就可以完美解决了,代码如下
/**
* Overwrite the method. disable the ProgressMonitorPart which take up place on bottom of page
*/
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite)super.createDialogArea(parent);
for(Control control : composite.getChildren()){
if(control instanceof ProgressMonitorPart){
GridData gd = (GridData)control.getLayoutData();
gd.exclude = true;
}
}
return composite;
}
效果如下