gpt4 book ai didi

java - 在鼠标单击事件处理程序中重新使用 getX() getY()

转载 作者:行者123 更新时间:2023-11-30 04:45:20 24 4
gpt4 key购买 nike

这是一个很长的问题。我已尽力使其更加简洁,但我认为您需要所有信息来提供帮助。

总结如下:我正在 try catch 连续点击作为端点。我将在这些点之间绘制 line2D 对象。我有一个监听器,它将点击事件中的 x 和 y 值发送​​到辅助类。我永远不会有超过两个点,因此辅助类只有 firstPoint 和 secondaryPoint 成员。我获得点击并使用 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 和 secondaryPoint,而不是引用 getX() 和 getY() 从鼠标事件返回的 double 值。

我只是不知道如何实现它。

此外,如果有更好的方法来捕获连续点击并将其转换为形状的端点,我欢迎您提供反馈。

最佳答案

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

关于java - 在鼠标单击事件处理程序中重新使用 getX() getY(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11110145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com