当我们想用SWT做自定义风格的窗口时,最容易想到的就是去除Shell的Title,但是默认情况下没有Title的Shell是不能拖动的。以下代码实现无Title窗口的拖动:
- Listener listener = new Listener() {
- int startX, startY;
- public void handleEvent(Event e) {
- if (e.type == SWT.MouseDown && e.button ==1) {
- startX = e.x;
- startY = e.y;
- }
- if (e.type == SWT.MouseMove && (e.stateMask & SWT.BUTTON1) !=0) {
- Point p = shell.toDisplay(e.x, e.y);
- p.x -= startX;
- p.y -= startY;
- shell.setLocation(p);
- }
- }
- };
- shell.addListener(SWT.MouseDown, listener);
- shell.addListener(SWT.MouseMove, listener);
测试了下 不行!!!
发现问题所在了,swt窗口是分级别的,shell出去最下层,如果shell内没有任何控件,以上代码是没问题的,但是如果之上有个form -》composite->lab等控件,一定要在最上层的控件上添加监听才有效,在下层空间加是不会生效的。