Java 检查鼠标是否在圆内

Java 检查鼠标是否在圆内,java,swt,Java,Swt,如何知道鼠标是否在画布上创建的圆内(在swt中) 我的问题是我发现的坐标不正确 代码如下: import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseMoveListener; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener

如何知道鼠标是否在画布上创建的圆内(在swt中) 我的问题是我发现的坐标不正确 代码如下:

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseMoveListener;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class CircleTest {
    static boolean i =false;
    static int x,y;
  public static void main(String[] args) {
    final Display display = new Display();
    Shell shell = new Shell(display);
    shell.setSize(430, 460);
    final Canvas c=new Canvas(shell,SWT.BORDER);
    c.setSize(370,380);
    c.setLocation(21, 21);

    c.addPaintListener(new PaintListener(){
        public void paintControl(PaintEvent e) {

                x = 50;
                y=50;
                e.gc.drawOval(x, y, 50, 50);
                e.gc.drawRectangle(x, y, 50, 50);
        }

    });  

        c.addMouseMoveListener(new MouseMoveListener(){

            @Override
            public void mouseMove(MouseEvent e) {
                System.out.println(e.x+" "+e.y);
                System.out.println(x+" "+y);

                int k = (e.x-x)*(e.x-x);
                int z = (e.y-y)*(e.y-y);
                double m = Math.sqrt(k + z);
                if (m <=25)
                {
                    System.out.println("in the circle");
                }
            }


        });

    shell.open();
    while(!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();            
    }   
    display.dispose();
  }
 }
import org.eclipse.swt.swt;
导入org.eclipse.swt.events.MouseEvent;
导入org.eclipse.swt.events.MouseMoveListener;
导入org.eclipse.swt.events.PaintEvent;
导入org.eclipse.swt.events.PaintListener;
导入org.eclipse.swt.widgets.Canvas;
导入org.eclipse.swt.widgets.Display;
导入org.eclipse.swt.widgets.Shell;
公共类电路测试{
静态布尔i=false;
静态int x,y;
公共静态void main(字符串[]args){
最终显示=新显示();
外壳=新外壳(显示);
外壳尺寸(430460);
最终画布c=新画布(外壳、SWT.边框);
c、 设置大小(370380);
c、 设定位置(21,21);
c、 addPaintListener(新的PaintListener(){
公共无效油漆控制(油漆事件e){
x=50;
y=50;
e、 gc.drawOval(x,y,50,50);
e、 绘制矩形图(x,y,50,50);
}
});  
c、 addMouseMoveListener(新的MouseMoveListener(){
@凌驾
公共无效mouseMove(MouseEvent e){
System.out.println(e.x+“”+e.y);
System.out.println(x+“”+y);
int k=(e.x-x)*(e.x-x);
int z=(e.y-y)*(e.y-y);
double m=数学sqrt(k+z);

如果(m您的
drawOval
方法是在指定的矩形内绘制圆:
(x,y,50,50)
。那么圆的中心位于
(x+25,y+25)

使用这些坐标在
mouseMove
方法中查找距中心的距离。

您的
drawOval
方法是在指定的矩形内绘制圆:
(x,y,50,50)
。因此圆的中心位于
(x+25,y+25)

使用这些坐标在
mouseMove
方法中查找距中心的距离。

您的
drawOval
方法是在指定的矩形内绘制圆:
(x,y,50,50)
。因此圆的中心位于
(x+25,y+25)

使用这些坐标在
mouseMove
方法中查找距中心的距离。

您的
drawOval
方法是在指定的矩形内绘制圆:
(x,y,50,50)
。因此圆的中心位于
(x+25,y+25)
。 使用这些坐标在
mouseMove
方法中查找到中心的距离