演示代码:
int[] crearCirculo(int radio, int centroX, int centroY) {
int[] puntos = nuevo int[360 * 2];
para(int i=0; i<360; i++) {
puntos[i*2] = centroX + (int)(radio * Math.cos(Math.toRadians(i)));
puntos[i*2+1] = centroY + (int)(radio * Math.sin(Math.toRadians(i)));
}
puntos de retorno;
}
Punto posición original = nulo;
RingShell público() {
pantalla final pantalla = nueva pantalla();
shell final shell = nuevo Shell (pantalla, SWT.NO_TRIM | SWT.ON_TOP);
shell.setBackground(display.getSystemColor(SWT.COLOR_DARK_MAGENTA));
Región región = nueva Región();
región.add(createCircle(100, 100, 100));
región.subtract(createCircle(50, 100, 100));
shell.setRegion(región);
shell.addMouseListener(nuevo MouseListener() {
mouseDoubleClick público vacío (MouseEvent e) {
mostrar.dispose();
}
mouseDown vacío público (MouseEvent e) {
posición original = nuevo punto (ex, ey);
}
mouseUp vacío público (MouseEvent e) {
posición original = nulo;
}
});
shell.addMouseMoveListener(nuevo MouseMoveListener() {
movimiento del mouse vacío público (MouseEvent e) {
if(posiciónoriginal == nulo) retorno;
Punto punto = display.map(shell, null, ex, ey);
shell.setLocation(punto.x - posición original.x, punto.y - posición original.y);
System.out.println("Movido de: " + posición original + " a " + punto);
}
});
Rectángulo límites de región = región.getBounds();
shell.setSize(regionBounds.width, regionBounds.height);
shell.open();
mientras (!shell.isDisposed()) {
si (!display.readAndDispatch()) {
mostrar.dormir();
}
}
mostrar.dispose();
región.dispose();
}
público estático vacío principal (String [] argumentos) {
nuevo RingShell();
}
}