<!-- 额,发觉写篇博客都不知怎么选分类了。。。名称太怪了。。。 选“行业应用”对么? 感觉太生硬难懂了 -->
最近搞自己的小玩意需要实现这么一个功能,功能菜单的隐藏和显示(不占位),网上说的啥设置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) {}
});
就是这么一个效果(整个都藏起来了,而且窗口变化不影响其大小):
记录下来,希望能帮上遇到同样问题的朋友。