Источник:
int[] createCircle(int radius, int centerX, int centerY) {
int[] точки = новый int[360 * 2];
for(int i=0; i<360; я++) {
Points[i*2] = centerX + (int)(radius * Math.cos(Math.toRadians(i)));
Points[i*2+1] = centerY + (int)(radius * Math.sin(Math.toRadians(i)));
}
точки возврата;
}
Точка originalPosition = null;
общественный RingShell() {
окончательный дисплей display = new Display();
окончательная оболочка оболочки = новая оболочка (дисплей, SWT.NO_TRIM | SWT.ON_TOP);
Shell.setBackground(display.getSystemColor(SWT.COLOR_DARK_MAGENTA));
Регион регион = новый регион();
Region.add(createCircle(100, 100, 100));
Region.subtract(createCircle(50, 100, 100));
оболочки.setRegion(регион);
shell.addMouseListener(новый MouseListener() {
public void mouseDoubleClick (MouseEvent e) {
дисплей.dispose();
}
public void mouseDown(MouseEvent e) {
originalPosition = новая точка (ex, ey);
}
public void mouseUp(MouseEvent e) {
исходная позиция = ноль;
}
});
shell.addMouseMoveListener(новый MouseMoveListener() {
public void mouseMove (MouseEvent e) {
если (originalPosition == null) return;
Точка point = display.map(shell, null, ex, ey);
Shell.setLocation(point.x - originalPosition.x, point.y - originalPosition.y);
System.out.println("Перемещено из: " + originalPosition + " в " + точку);
}
});
Прямоугольник RegionBounds = Region.getBounds();
Shell.setSize(regionBounds.width, RegionBounds.height);
оболочка.открыть();
в то время как (!shell.isDispose()) {
если (!display.readAndDispatch()) {
дисплей.сон();
}
}
дисплей.dispose();
регион.dispose();
}
public static void main(String[] args) {
новый RingShell();
}
}