Question

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.

Était-ce utile?

La solution

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top