0

有没有办法删除 SWTShell边框并支持窗口重新定位。我SWT.NONE在我的 Shell 样式中使用了删除窗口边框,但它也最终锁定了 UI 位置。

4

1 回答 1

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);
于 2014-04-17T09:03:48.900 回答