[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) {}
});

 

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

 

 

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值