我想在 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
}
}
我是一名优秀的程序员,十分优秀!