SWT窗口程序默认是带标题栏的,窗口栏有最小化、最大化、关闭按钮,我们可以拖动标题栏实现窗口的移动
此时窗口不能拖动了,只能通过加监听事件实现
当我们加入下面这段代码,就能实现窗口的拖动了,如果窗口的上方没有任何控件覆盖,这时窗口的任何地方都能产生拖动效果,如果有覆盖,则覆盖的地方不能产生拖动效果。
//给窗口加监听 事件
Listener listener = new Listener() {
int startX, startY;
@Override
public void handleEvent(Event arg0) {
if (arg0.type == SWT.MouseDown && arg0.button == 1) {
startX = arg0.x;
startY = arg0.y;
}
if (arg0.type == SWT.MouseMove && (arg0.stateMask & SWT.BUTTON1) != 0) {
Point p = shell.toDisplay(arg0.x, arg0.y);
p.x -= startX;
p.y -= startY;
shell.setLocation(p);
}
}
};
shell.addListener(SWT.MouseDown, listener); //鼠标按下
shell.addListener(SWT.MouseMove, listener); //鼠标移动
//从而实现鼠标拖动窗口
如果想让shell上方的控件也能产生拖动窗口拖动效果,只需要给对应的控件加上监听就行,如:
//给label加上监听
label.addListener(SWT.MouseDown, listener);
label.addListener(SWT.MouseMove, listener);