有没有办法删除SWT Shell
边框并支持窗口重新定位。我在我的Shell样式中使用了SWT.NONE
来删除窗口边框,但最终也锁定了UI位置。
答案 0 :(得分:2)
是的,你可以,但你必须自己处理拖动事件。这是一个例子:
public static void main(String[] args)
{
final Display display = new Display();
final Shell shell = new Shell(display, SWT.NO_TRIM | SWT.ON_TOP);
Listener l = new Listener()
{
Point origin;
public void handleEvent(Event e)
{
switch (e.type)
{
case SWT.MouseDown:
origin = new Point(e.x, e.y);
break;
case SWT.MouseUp:
origin = null;
break;
case SWT.MouseMove:
if (origin != null)
{
Point p = display.map(shell, null, e.x, e.y);
shell.setLocation(p.x - origin.x, p.y - origin.y);
}
break;
}
}
};
shell.addListener(SWT.MouseDown, l);
shell.addListener(SWT.MouseUp, l);
shell.addListener(SWT.MouseMove, l);
shell.setSize(400, 300);
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}
发布屏幕截图并不值得,因为它只是一个可拖动的灰色窗口。
<强>更新强>
如果你希望整个Shell
可以拖动,即使它包含其他小部件,那么请改用它:
display.addFilter(SWT.MouseDown, l);
display.addFilter(SWT.MouseUp, l);
display.addFilter(SWT.MouseMove, l);