如何在jframe中查找滑动方向

时间:2016-04-22 18:09:02

标签: java swing jframe awt

我正在开发一个在触摸屏linux平板电脑上运行的swing应用程序。我想实现一个模块,在其中我发现用户在屏幕上滑动手指的方向。我正在使用MouseMotionListener来查找鼠标的位置。但现在我很困惑,我怎么能找到鼠标移动的确切方向。我只对在jframe上找到向上和向下移动感兴趣。有人可以给我一些想法

2 个答案:

答案 0 :(得分:1)

  

我正在使用MouseMotionListener来查找鼠标的位置。

我猜你需要跟踪两个MouseEvents:

  1. 上一个事件(或者是开始滑动的mousePressed事件?)
  2. 当前事件。
  3. 这样您就可以访问每个事件生成的两个点。

    然后使用基本数学比较两点。如果当前的y值较大,则向下滑动,否则向上滑动。

答案 1 :(得分:0)

我想添加这个示例代码来说明@ camickr的答案,因为它可能会有所帮助 - 因为它被编辑拒绝了,而且我没有足够的点来添加评论,这里是:

import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class DragDirectionDemo {

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {

                JFrame frame = new JFrame("Drag Direction Demo");
                frame.setSize(500, 500);
                frame.setVisible(true);
                frame.addMouseListener(new MouseListener() {

                    float lastY = 0;

                    public void mouseReleased(MouseEvent e) {
                        System.out.println("Mouse released at " + e.getY());
                        if (e.getY() < lastY) {
                            System.out.println("Upward swipe");
                        } else if (e.getY() > lastY) {
                            System.out.println("Downward swipe");
                        } else {
                            System.out.println("No movement");
                        }
                        ;
                    }

                    public void mousePressed(MouseEvent e) {
                        System.out.println("Mouse clicked at " + e.getY());
                        lastY = e.getY();
                    }

                    public void mouseEntered(MouseEvent e) {
                    }

                    public void mouseExited(MouseEvent e) {
                    }

                    public void mouseClicked(MouseEvent e) {
                    }
                });
            }
        });
    }
}

这只是一个玩具示例,说明了@ camickr的答案中解释的方法:在动作开始时跟踪y坐标(按下鼠标按钮,在我的例子中);然后,将它与运动结束时的y坐标进行比较(在我的示例中释放鼠标按钮 - 可能需要调整触摸,我不知道)。

观察控制台输出,指示已拾取动作的内容。祝你好运!