演示代码:
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();
}
}