Ring Shell : Shell Display « SWT JFace Eclipse « Java

Ring Shell

Ring Shell

 * Copyright (c) 1998, 2004 Jackwind Li Guojie
 * All right reserved. 
 * Created on Jan 25, 2004 7:58:06 PM by JACK
 * $Id$
 * visit: http://www.asprise.com/swt

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.MouseMoveListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.graphics.Region;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class RingShell {
  int[] createCircle(int radius, int centerX, int centerY) {
    int[] points = new int[360 * 2];
    for(int i=0; i<360; i++) {
      points[i*2] = centerX + (int)(radius * Math.cos(Math.toRadians(i)));
      points[i*2+1] = centerY + (int)(radius * Math.sin(Math.toRadians(i)));
    return points;
  Point originalPosition = null;

  public RingShell() {
    final Display display = new Display();
    final Shell shell = new Shell(display, SWT.NO_TRIM | SWT.ON_TOP);
    Region region = new Region();
    region.add(createCircle(100, 100, 100));
    region.subtract(createCircle(50, 100, 100));
    // Make the shell movable by using the mouse pointer. 
    shell.addMouseListener(new MouseListener() {
      public void mouseDoubleClick(MouseEvent e) {
        shell.dispose(); // Double click to dispose the shell.

      public void mouseDown(MouseEvent e) {
        originalPosition = new Point(e.x, e.y);

      public void mouseUp(MouseEvent e) {
        originalPosition = null;
    shell.addMouseMoveListener(new MouseMoveListener() {
      public void mouseMove(MouseEvent e) {
        if(originalPosition == null)
        Point point = display.map(shell, null, e.x, e.y);
        shell.setLocation(point.x - originalPosition.x, point.y - originalPosition.y);
        System.out.println("Moved from: " + originalPosition + " to " + point);
    Rectangle regionBounds = region.getBounds();
    shell.setSize(regionBounds.width, regionBounds.height);

    // Set up the event loop.
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        // If no more entries in event queue
  public static void main(String[] args) {
    new RingShell();


Related examples in the same category

1.Create a non-rectangular shell to simulate transparencyCreate a non-rectangular shell to simulate transparency
2.SWT Shell : create a non-rectangular windowSWT Shell : create a non-rectangular window
3.Open a shell maximized (full screen)Open a shell maximized (full screen)
4.Open a shell minimized (iconified)Open a shell minimized (iconified)
5.Non Rectangular Window in SWTNon Rectangular Window in SWT
6.Widget Test
7.HelloWorld DisplayHelloWorld Display
8.Shell StyleShell Style
9.Shows the various styles of DecorationsShows the various styles of Decorations
10.Child Shell ExampleChild Shell Example
11.Child Shell Example 2Child Shell Example 2
12.Child Shell Example 3Child Shell Example 3
13.Shell Styles Example
14.Professional ShellProfessional Shell
15.Complex Shell ExampleComplex Shell Example
16.Composite Shell Example 2Composite Shell Example 2
17.SWT Composite ClassSWT Composite Class
18.Simplest SWTSimplest SWT
19.Prevent a shell from closing (prompt the user)Prevent a shell from closing (prompt the user)
20.Create a splash screen in SWTCreate a splash screen in SWT
21.Display example snippet: get the bounds and client area of a displayDisplay example snippet: get the bounds and client area of a display
22.Display: stop a repeating timer when a button is pressedDisplay: stop a repeating timer when a button is pressed
23.Create one repeating timer (every 500 ms)Create one repeating timer (every 500 ms)
24.Create two one shot timers (5000 ms, 2000 ms)Create two one shot timers (5000 ms, 2000 ms)
25.Create and dispose children of a compositeCreate and dispose children of a composite