这是一个很长的问题。我试图让它更简洁,但我认为你需要所有信息来提供帮助。
这是一个摘要:我正在尝试将连续点击捕获为端点。我将在这些点之间绘制 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;
}
+ 正如您所期望的那样,标准的 getter/setter。
调试表明
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 值。
我只是不知道如何实现它。
此外,如果有更好的方法来捕获连续点击并将它们转换为形状的端点,我会欢迎反馈。