更改scrolledcomposite中组件布局(组件大小个数变化)
//更改布局
number.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
if(number.getSelectionIndex()==0)
{ singlegridLay.numColumns=3;
gd_single_1.heightHint = inside1.getSize().y/3-20;
Point size = singles.computeSize(SWT.DEFAULT, SWT.DEFAULT);
// 设置 singles大小,重新计算滚动条的作用
singles.setSize(size);
// 重新设置滚动条大小
inside1.getVerticalBar().setMaximum(size.y);
// 获取当前滚动位置,如果singles的大小发生了变化,那么要确保大小变化后的滚动位置是正确的
// 否则就会在singles下方出现一段空白的位置。
int scrollHeight = inside1.getVerticalBar().getSelection()
+ inside1.getClientArea().height;
// 如果singles高度变小了,那么滚动的位置重新设置
if (scrollHeight >= size.y) {
inside1.setOrigin(0, size.y);
}
singles.layout(true);
size.x += IDialogConstants.HORIZONTAL_SPACING;
size.y += IDialogConstants.VERTICAL_SPACING+200;
inside1.setMinSize(size);
inside1.layout(true);
System.out.println("2*2");
System.out.println(inside1.getSize().y);
System.out.println(number.getSelectionIndex());
}
else
{ singlegridLay.numColumns=2;
gd_single_1.heightHint = inside1.getSize().y/2-20;
Point size = singles.computeSize(SWT.DEFAULT, SWT.DEFAULT);
// 设置 singles大小
singles.setSize(size);
// 重新设置滚动条大小
inside1.getVerticalBar().setMaximum(size.y);
// 获取当前滚动位置,如果singles的大小发生了变化,那么要确保大小变化后的滚动位置是正确的
// 否则就会在singles下方出现一段空白的位置。
int scrollHeight = inside1.getVerticalBar().getSelection()
+ inside1.getClientArea().height;
// 如果singles高度变小了,那么滚动的位置重新设置
if (scrollHeight >= size.y) {
inside1.setOrigin(0, size.y);
}
size.x += IDialogConstants.HORIZONTAL_SPACING;
size.y += IDialogConstants.VERTICAL_SPACING+200;
inside1.setMinSize(size);
singles.layout(true);
inside1.layout(true);
System.out.println("3*3");
}
}});
选择2*2或者3*3内部的single宽度只有第一行变化,后面的都被压缩了,应该是外层singles的大小没有修改成功,if,else经测试是起到作用了.而且经过几次变换后界面停在2*2的状态。
麻烦大家帮忙看看if,else里面的语句哪里出错了,十分感谢
补充:Java , Eclipse