演示代码:
int[] createCircle(int radius, int centerX, int centerY) {
int[] 포인트 = 새로운 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)));
}
반환점;
}
포인트 원래 위치 = null;
공개 RingShell() {
최종 디스플레이 디스플레이 = new Display();
최종 쉘 쉘 = new Shell(display, SWT.NO_TRIM | SWT.ON_TOP);
shell.setBackground(display.getSystemColor(SWT.COLOR_DARK_MAGENTA));
지역 지역 = 새로운 지역();
지역.추가(createCircle(100, 100, 100));
Region.subtract(createCircle(50, 100, 100));
shell.setRegion(지역);
shell.addMouseListener(새 MouseListener() {
공공 무효 mouseDoubleClick(MouseEvent e) {
디스플레이.dispose();
}
공공 무효 mouseDown(MouseEvent e) {
OriginalPosition = new Point(ex, ey);
}
공공 무효 mouseUp(MouseEvent e) {
원래 위치 = null;
}
});
shell.addMouseMoveListener(new MouseMoveListener() {
공공 무효 mouseMove(MouseEvent e) {
if(originalPosition == null) return;
포인트 포인트 = display.map(shell, null, ex, ey);
shell.setLocation(point.x - originalPosition.x, point.y - originalPosition.y);
System.out.println("이동 위치: " + originalPosition + "에서 " + 지점);
}
});
직사각형 지역 경계 = 지역.getBounds();
shell.setSize(regionBounds.width, RegionBounds.height);
shell.open();
동안 (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
디스플레이.수면();
}
}
디스플레이.dispose();
지역.dispose();
}
공개 정적 무효 메인(String[] args) {
새로운 RingShell();
}
}