演示代:
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)));
}
ポイントを返す。
}
ポイントoriginalPosition = null;
public RingShell() {
最終ディスプレイ display = new Display();
最終シェルshell = new Shell(display, SWT.NO_TRIM | SWT.ON_TOP);
shell.setBackground(display.getSystemColor(SWT.COLOR_DARK_MAGENTA));
リージョンリージョン = 新しいリージョン();
領域.add(createCircle(100, 100, 100));
領域.subtract(createCircle(50, 100, 100));
シェル.setRegion(領域);
shell.addMouseListener(new MouseListener() {
public void MouseDoubleClick(MouseEvent e) {
表示.dispose();
}
public void MouseDown(MouseEvent e) {
オリジナル位置 = 新しいポイント(ex, ey);
}
public void MouseUp(MouseEvent e) {
元の位置 = null;
}
});
shell.addMouseMoveListener(new MouseMoveListener() {
public void MouseMove(MouseEvent e) {
if(originalPosition == null) 戻り値;
ポイント point = display.map(shell, null, ex, ey);
shell.setLocation(point.x -originalPosition.x, point.y -originalPosition.y);
System.out.println("移動元: " +originalPosition + " から " + point);
}
});
長方形の領域境界 = 領域.getBounds();
shell.setSize(regionBounds.width,regionBounds.height);
シェル.オープン();
while (!shell.isDissolved()) {
if (!display.readAndDispatch()) {
ディスプレイ.スリープ();
}
}
表示.dispose();
領域.dispose();
}
public static void main(String[] args) {
新しいリングシェル();
}
}