在鼠标点击中使用getX()getY()

这是一个长期的问题。 我试图让它更简洁,但我认为你需要所有的信息来协助。

以下是一个总结:我试图捕获连续点击作为端点。 我将在这些点之间绘制line2D对象。 我有一个侦听器,它将点击事件的x和y值发送给一个辅助类。 我永远不会超过两点,所以助手类只有firstPoint和secondPoint成员。 我使用evt.getX()和evt.getY()获得点击并将坐标发送给助手类。 帮助者创建点,但是firstPoint以与secondPoint相同的协调角色结束。 我在代码块下面可以找到关于发生了什么的详细信息。

以下是我的鼠标点击处理程序中的代码:

public class Dashboard extends javax.swing.JFrame {

    public static ClickMaster myClicks = new ClickMaster();
    public static boolean drawing = false;
    private MyPoint firstPoint = new MyPoint();
    private MyPoint secondPoint = new MyPoint();

。 。 。

private void MyDrawingPanelMouseClicked(java.awt.event.MouseEvent evt) {
        if (firstPoint.getPointType().equals(MyPoint.PointType.NULL)) {
            drawing = !drawing;
            firstPoint = myClicks.parseClick(evt.getX(), evt.getY(), drawing);
        } else if (drawing){
            drawing = !drawing;
            secondPoint = myClicks.parseClick(evt.getX(), evt.getY(), drawing);
            myClicks.parsePoints(firstPoint, secondPoint);
        }
}

这是返回点的助手类:

public class ClickMaster {

    MyPoint anyPoint = new MyPoint();

    public ClickMaster() {
        anyPoint.setPointType(MyPoint.PointType.NULL);
    }

    public MyPoint parseClick(double x, double y, boolean firstClick) {
            if (firstClick) {
                anyPoint.setPointType(MyPoint.PointType.ANCHOR);
            } else {
                anyPoint.setPointType(MyPoint.PointType.END);
            }

        anyPoint.setX(x);
        anyPoint.setY(y);

        return anyPoint;
    }

这里是我的Point2D对象的实现,以防它是相关的:

public class MyPoint extends Point2D {

    public enum PointType {

        ANCHOR, END, SOLO, NULL
    };

    double x;
    double y;
    PointType pointType;

    public MyPoint(PointType pType, double x, double y) {

        this.x = x;
        this.y = y;
        this.pointType = pType;
    }

    public MyPoint() {
        this.x = 0.0;
        this.y = 0.0;
        this.pointType = PointType.NULL;
    }

+你所期望的标准获取者/设置者。

调试显示

firstPoint = myClicks.parseClick(firstX, firstY, drawing);

导致鼠标事件的x和y值有一个点。 这是预料之中的。

同样,

secondPoint = myClicks.parseClick(evt.getX(), evt.getY(), drawing);

结果是第二次点击的x和y值。 也期待。

但是,当我打电话

myClicks.parsePoints(firstPoint, secondPoint);

我看到firstPoint和secondPoint具有相同的x,y值。

我不确定,但我相信这是因为firstPoint和secondPoint都从鼠标evt获取它们的x和y值。 我认为我需要将x和y的double类型的值放入firstPoint和secondPoint,而不是通过getX()和getY()从鼠标事件返回的double值的引用。

我只是不知道如何让它发生。

另外,如果有更好的方法来捕获连续点击并将它们转化为形状的端点,我会欢迎反馈。


其实,你的问题是anyPoint。 由于您只有一个ClickMaster实例,并且anyPoint仅初始化一次,所以无论您调用parseClick多少次,都会返回对同一对象的引用。 ParseClick需要在每次调用它时创建一个新的MyPoint,并返回它。

链接地址: http://www.djcxy.com/p/83247.html

上一篇: using getX() getY() in a mouseclick

下一篇: Implementing boolean contains(Rectangle2D r) method of Shape interface