这是一个很长的问题。我试图让它更简洁,但我认为你需要所有的信息来帮助。
以下是摘要: 我试图将连续点击捕获为端点。我将在这些点之间绘制line2D对象。我有一个监听器,它将点击事件中的x和y值发送给辅助类。我永远不会超过两个点,因此助手类只有firstPoint和secondPoint成员。我得到了点击,并使用evt.getX()和evt.getY()将坐标发送到辅助类。帮助程序创建点,但firstPoint最终使用与secondPoint相同的co-ords。我的详细信息可以在代码块下面找到。
这是我的鼠标点击处理程序中的代码:
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值。
我只是不知道如何实现它。
此外,如果有更好的方法来捕获连续点击并将其转换为形状的端点,我欢迎反馈。
答案 0 :(得分:2)
实际上,你的问题是anyPoint。由于您只有一个ClickMaster实例,并且anyPoint只初始化一次,因此无论您调用parseClick多少次,都会返回对同一对象的引用。 ParseClick需要在每次调用时创建一个新的MyPoint并返回它。