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

标签 java mouseevent motion

我想在 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/

相关文章:

Java - 理解接口(interface)

c - C 中的简单 NCURSES 鼠标处理

input - 运动和 fswebcam 运行

python - Raspberry Pi - Python 中的 GPIO 事件

java - 将方法参数重构为其成员函数的有效方法?

java - JTabbedPane:选项卡本身之前和之后的组件

javascript - Mousedown 和 mouseup 同时以 Angular 触发

c++ - winapi mouse_event 错误坐标

camera - Raspberry Pi - Raspbian - 运动 - USB 摄像头 - 黑色图像

java - Window JPanel 是透明的吗?