[SWT]SashForm中固定单侧大小(&实现面板隐藏)

<!-- 额,发觉写篇博客都不知怎么选分类了。。。名称太怪了。。。 选“行业应用”对么? 感觉太生硬难懂了 -->

最近搞自己的小玩意需要实现这么一个功能,功能菜单的隐藏和显示(不占位),网上说的啥设置layout的参数,貌似必须是GridLayout才有那玩意的,我试了直接将组件setVisible(false);是不行的。

经试验,利用SashForm可以实现。

首先是隐藏和显示,只要composite.setVisible([true|false]);就OK了:

composite.setVisible(enable);
composite.getParent().layout();
 

然后有个问题,就是Sash中每个分区的大小会按比例自动缩放,我希望其中一侧大小(宽度/高度之一)固定。

后来灵机一动,发现只要监听其大小变化,然后强行设置不就可以,毕竟固定的大小是预先知道的:

int compositeH = 164; // 组件固定高度
sashForm.addControlListener(new ControlListener() {
			
	@Override
	public void controlResized(ControlEvent e) {
		Point p =sashForm.getSize();
		sashForm.setWeights(new int[]{p.y-compositeH, compositeH}); // 这里是关键
	}
			
	@Override
	public void controlMoved(ControlEvent e) {}
});

就是这么一个效果(整个都藏起来了,而且窗口变化不影响其大小):

 

记录下来,希望能帮上遇到同样问题的朋友。

猜你喜欢

转载自univasity.iteye.com/blog/1682416
今日推荐