拖动无标栏的SWT窗口

当我们想用SWT做自定义风格的窗口时,最容易想到的就是去除Shell的Title,但是默认情况下没有Title的Shell是不能拖动的。以下代码实现无Title窗口的拖动:

[java] view plain copy print ?
  1. Listener listener = new Listener() { 
  2.     int startX, startY; 
  3.     public void handleEvent(Event e) { 
  4.         if (e.type == SWT.MouseDown && e.button ==1) { 
  5.             startX = e.x; 
  6.             startY = e.y; 
  7.         } 
  8.         if (e.type == SWT.MouseMove && (e.stateMask & SWT.BUTTON1) !=0) { 
  9.             Point p = shell.toDisplay(e.x, e.y); 
  10.             p.x -= startX; 
  11.             p.y -= startY; 
  12.             shell.setLocation(p); 
  13.         } 
  14.     } 
  15. }; 
  16. shell.addListener(SWT.MouseDown, listener); 
  17. shell.addListener(SWT.MouseMove, listener); 

 

测试了下 不行!!!

发现问题所在了,swt窗口是分级别的,shell出去最下层,如果shell内没有任何控件,以上代码是没问题的,但是如果之上有个form -》composite->lab等控件,一定要在最上层的控件上添加监听才有效,在下层空间加是不会生效的。

你可能感兴趣的:(java,shell,测试,SWT)