在用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。如果你发现它有什么缺陷,或者有好的改进方法,欢迎与我联系。
请你留言