SWT(JFace)体验之圆环状(戒指型)

2022-10-20,,,,

演示代码:
复制代码 代码如下:
package swt_jface.demo1;
import org.eclipse.swt.swt;
import org.eclipse.swt.events.mouseevent;
import org.eclipse.swt.events.mouselistener;
import org.eclipse.swt.events.mousemovelistener;
import org.eclipse.swt.graphics.point;
import org.eclipse.swt.graphics.rectangle;
import org.eclipse.swt.graphics.region;
import org.eclipse.swt.widgets.display;
import org.eclipse.swt.widgets.shell;
public class ringshell {

int[] createcircle(int radius, int centerx, int centery) {
int[] points = new 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)));
}
return points;
}

point originalposition = null;
public ringshell() {

final display display = new display();
final shell shell = new shell(display, swt.no_trim | swt.on_top);
shell.setbackground(display.getsystemcolor(swt.color_dark_magenta));

region region = new region();
region.add(createcircle(100, 100, 100));
region.subtract(createcircle(50, 100, 100));
shell.setregion(region);

shell.addmouselistener(new mouselistener() {
public void mousedoubleclick(mouseevent e) {
display.dispose();
}
public void mousedown(mouseevent e) {
originalposition = new point(e.x, e.y);
}
public void mouseup(mouseevent e) {
originalposition = null;
}
});

shell.addmousemovelistener(new mousemovelistener() {
public void mousemove(mouseevent e) {
if(originalposition == null) return;
point point = display.map(shell, null, e.x, e.y);
shell.setlocation(point.x - originalposition.x, point.y - originalposition.y);
system.out.println("moved from: " + originalposition + " to " + point);
}
});

rectangle regionbounds = region.getbounds();
shell.setsize(regionbounds.width, regionbounds.height);
shell.open();
while (!shell.isdisposed()) {
if (!display.readanddispatch()) {
display.sleep();
}
}
display.dispose();
region.dispose();
}

public static void main(string[] args) {
new ringshell();
}
}

《SWT(JFace)体验之圆环状(戒指型).doc》

下载本文的Word格式文档,以方便收藏与打印。