演示程式碼:
int[] createCircle(int radius, int centerX, int centerY) {
int[] 點 = new int[360 * 2];
for(int i=0; i<360; i++) {
點[i*2] = centerX + (int)(半徑 * Math.cos(Math.toRadians(i)));
點[i*2+1] = centerY + (int)(半徑 * Math.sin(Math.toRadians(i)));
}
返回積分;
}
點原始位置 = null;
公共 RingShell() {
最終顯示顯示=新顯示();
最終 Shell shell = 新 Shell(顯示, SWT.NO_TRIM | SWT.ON_TOP);
shell.setBackground(display.getSystemColor(SWT.COLOR_DARK_MAGENTA));
區域區域=新區域();
區域.add(createCircle(100, 100, 100));
區域.subtract(createCircle(50, 100, 100));
shell.setRegion(區域);
shell.addMouseListener(new MouseListener() {
公共無效mouseDoubleClick(MouseEvent e){
顯示.dispose();
}
公共無效mouseDown(MouseEvent e){
原始位置 = 新點(ex, ey);
}
公有無效mouseUp(MouseEvent e){
原始位置=空;
}
});
shell.addMouseMoveListener(new MouseMoveListener() {
公共無效滑鼠移動(MouseEvent e){
if(originalPosition == null) 回傳;
點 point = display.map(shell, null, ex, ey);
shell.setLocation(point.x - 原始位置.x, 點.y - 原始位置.y);
System.out.println("從: " + originalPosition + " 移到 " + point);
}
});
矩形regionBounds =region.getBounds();
shell.setSize(regionBounds.width,regionBounds.height);
shell.open();
while (!shell.isDispose()) {
if (!display.readAndDispatch()) {
顯示.睡眠();
}
}
顯示.dispose();
區域.dispose();
}
公共靜態無效主(字串[] args){
新的RingShell();
}
}