当前位置:编程学习 > JAVA >>

更改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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,