用SWT做圆形控件

public static void main(String[] args) {

final Display display = new Display();

final Shell shell = new Shell(display, SWT.NO_TRIM);

Region region = new Region();

region.add(circle(20, 500, 300));

shell.setRegion(region);

// shell.setBackground(display.getSystemColor(SWT.COLOR_DARK_GRAY));

shell.setBackgroundImage(new Image(shell.getDisplay(),"C://Program Files//Movie Maker//Shared//Sample2.jpg"));

Listener l = new Listener() {

int startX, startY;

public void handleEvent(Event e) {

if (e.type == SWT.KeyDown && e.character == SWT.ESC) {

shell.dispose();

}

if (e.type == SWT.MouseDown && e.button == 1) {

startX = e.x;

startY = e.y;

}

if (e.type == SWT.MouseMove && (e.stateMask & SWT.BUTTON1) != 0) {

Point p = shell.toDisplay(e.x, e.y);

p.x -= startX;

p.y -= startY;

shell.setLocation(p);

}

}

};

shell.addListener(SWT.KeyDown, l);

shell.addListener(SWT.MouseDown, l);

shell.addListener(SWT.MouseMove, l);

shell.addListener(SWT.Paint, l);

shell.open();

while (!shell.isDisposed()) {

if (!display.readAndDispatch())

display.sleep();

}

region.dispose();

display.dispose();

}

static int[] circle(int r, int offsetX, int offsetY) {

int[] polygon = new int[8 * r + 4];

// x^2 + y^2 = r^2

for (int i = 0; i < 2 * r + 1; i++) {

int x = i - r;

int y = (int)Math.sqrt(r*r - x*x);

polygon[2*i] = offsetX + x;

polygon[2*i+1] = offsetY + y;

polygon[8*r - 2*i - 2] = offsetX + x;

polygon[8*r - 2*i - 1] = offsetY - y;

}

return polygon;

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值