gpt4 book ai didi

java - 如何在Java中创建一个只接受对角线鼠标移动的MouseMotionListener?

转载 作者:太空宇宙 更新时间:2023-11-04 13:08:10 25 4
gpt4 key购买 nike

我想在 Java 中创建一个 MouseMotionListener 来实现 mouseDragged 方法,因此它只关心对角鼠标移动。

我尝试通过保存旧的 X/Y 并将其与新的 X/Y 进行比较来计算鼠标位置的斜率,如下所示:

public void mouseDragged(MouseEvent e) {
int deltaX = e.getX() - oldX;
int deltaY = e.getY() - oldY;
if (deltaX != 0) {
int slope = deltaY / deltaX;
if (slope == 1 || slope == -1) {
draggedHookPoint.setDraggedPosition(e);
}
}
}
oldX = e.getX();
oldY = e.getY();
}

我遇到的问题是 oldX 和 oldY 始终与新值相同。我想也许在方法结束时保存值会起作用。 我应该如何保存这些值?有更好的方法吗?

编辑:所以 oldX 和 oldY 并不总是相同,我更改了代码来查找斜率 == -1 ||斜率 == 1 ,但问题是它仍然接受一些似乎不是对角线的鼠标时刻。

最佳答案

我写了这段代码,基本上你在 JFrame 上画一条线,它会告诉你这条线是直线还是对角线。如果它是对角线,它会给你起点和终点之间的斜率。

public class Test extends JFrame implements MouseMotionListener, MouseListener {

public boolean diagonal;

public Point start;

public static void main(String[] args) throws IOException {
JFrame j = new Test();
}

public Test() {
setSize(600, 600);
setVisible(true);
addMouseMotionListener(this);
addMouseListener(this);
}

@Override
public void mouseDragged(MouseEvent arg0) {
if (start == null) {
start = new Point(arg0.getX(), arg0.getY());
}
}

@Override
public void mouseReleased(MouseEvent arg0) {
if (start != null) {
if (start.x != arg0.getX() && start.y != arg0.getY()) {
System.out.println("Diagonal");
double slope = (arg0.getY()-start.y)/(arg0.getX()-start.getX());
System.out.println("Slope is: " + slope);
} else {
System.out.println("Straight");
}
start = null;
}

}
@Override
public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub

}

}

关于java - 如何在Java中创建一个只接受对角线鼠标移动的MouseMotionListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34232583/

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