在用Eclipse开发Java程序的过程中,使用过SashForm的朋友一定知道它的功能。没错,他就是一个容器, 放在这个容器中的Control可以自定义大小,还可以通过拖拽Sash来改变Control的大小。设置SashForm内各个Control的相对大小可以通过SashForm.setWeights( int[] weights )来设定。
嗯,这都没错。但是如果我希望固定SashForm中某个(或多个)Control的大小(当SashForm大小改变时,这个Control的大小仍然不变),仅仅是当拖拽与此Control相邻的Sash的时候,它的大小才改变,那么这个时候SashForm就会显得力不从心了。
于是,我把它重新写了一遍,称之为CSashForm,除了能够实现SashForm的所有功能之外,还能够为它的Children Control设置固定的大小,为此,我为它添加了一个接口,public void setExactSizes( int[] sizes)。这个函数的功能就是设置每个子控件的固定大小,每个size的取值范围是大于或等于0的整数或CSashFormData.NOT_SET,当取值为CSashFormData.NOT_SET的时候,表示不为它设置值。如果SashForm中的Control是竖直排列的,那么size就是它的高度;如果是水平排列的,那么size就是它的宽度。

  在使用的时候,setWeights()和setSizes()可以配合使用(单独使用也行)。
  举例说明:假设一个CSashForm中的控件是水平排列的,它有4个控件,我希望第3个控件宽度为50,其它的控件的宽度比例为1:2:3,那么我可以写这两行代码:

cSashForm.setWeights(  new   int [] {
                
1 , 2 ,CSashFormData.NOT_SET,  3
        }
 );
cSashForm.setSizes( 
new   int [] {
               
CSashFormData.NOT_SET , CSashFormData.NOT_SET , 50 , CSashFormData.NOT_SET
        }
 );

  
  经过我的初步测试,程序运行结果没有任何问题。但是运行效率不甚理想,当拖拽CSashForm的时候,它包含Control大小改变的时候,会出现闪烁,这个以后我会进一步改进。
  具体实现我就不一一讲解,对源代码感兴趣的朋友点击此处 下载。你也可以完全免费使用它,不过你必须遵循Eclipse Public License v1.0 。如果你发现它有什么缺陷,或者有好的改进方法,欢迎与我联系。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐