用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;

    }

转载于:https://www.cnblogs.com/okuc/archive/2010/06/22/4111598.html

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值