Вопрос

Is there a way to remove SWT Shell border and also support window re-positioning. I used SWT.NONE in my Shell style to remove the window border but it also ended up in locking the UI position.

Это было полезно?

Решение

Yes you can, but you have to handle drag events yourself. Here is an example:

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();
}

It's not really worth posting a screenshot, since it's just a draggable grey window.

Update

If you want the whole Shell to be draggable even if it contains other widgets, then use this instead:

    display.addFilter(SWT.MouseDown, l);
    display.addFilter(SWT.MouseUp, l);
    display.addFilter(SWT.MouseMove, l);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top