65.9K
CodeProject 正在变化。 阅读更多。
Home

在 Java Swing 中实现鼠标手势:分步指南

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (2投票s)

2008 年 6 月 29 日

CPOL

3分钟阅读

viewsIcon

52596

downloadIcon

759

分步指南,教您如何在 Swing 应用程序中实现基于鼠标手势的命令。

介绍 - 鼠标手势

鼠标手势是一种独特地组合鼠标点击和后续鼠标移动的方式,这些移动将被解释为当前应用程序的特定命令。您必须了解的一个简单鼠标手势是鼠标“拖动”,您单击特定对象并移动鼠标,保持鼠标点击,直到某个特定点。这可能会被应用程序(或操作系统)解释为一个命令,例如将对象从其源位置移动到鼠标最终释放的位置。

虽然“拖动”是最常见的鼠标手势类型,但还有其他类型的鼠标手势。例如,在 Opera 浏览器 中,您可以按住鼠标右键并向左移动鼠标以转到浏览器历史记录中的上一页。

显然,鼠标手势很酷,可以让您的应用程序用户执行命令,而无需他们将手从鼠标移到键盘上。

本文逐步解释了如何在 Java Swing 中实现这样的鼠标手势。如需更多此类提示和文章,请 点击此处

在 Java Swing 中实现鼠标手势

Java 中有许多软件库可以实现此功能。其中两个最有名的是 iGestureSmardec 的鼠标手势
在本文中,让我们讨论其中之一:Smardec 的“鼠标手势”。

您应该能够识别什么?

要实现鼠标手势,您至少应该能够识别这些

在按住其中一个鼠标键(左、右或中键)的同时,用户

  1. 向下移动鼠标(我们称其为操作 'D')
  2. 向上移动鼠标(操作 'U')
  3. 向右移动鼠标(操作 'R')
  4. 向左移动鼠标(操作 'L')

一旦您的库允许您执行这些操作,您就可以使用一系列操作来制作您的一个命令。例如,一组命令“DR”(向下然后向右)可以是一个命令,它使用户绘制一个看起来像字母“L”的命令。

实践:识别鼠标手势

好的,理论已经够多了。让我们编写代码。但在那之前,让我们确定一个我们需要跟踪的手势。我们的简单应用程序将是一个空白表单,带有一个标签,用户可以在其中进行鼠标手势。当他/她做出如下手势时,同时按住鼠标右键,我们将其解释为一个命令,并在标签中显示一条消息。

mouseGestureArrow.JPG

显然,此命令在按住鼠标右键的同时按 D,R,U 的顺序执行

应用程序

我们将在下面定义我们的应用程序的外观。

  1. 最初,我们的应用程序将如下所示

outputStart.JPG

  1. 当用户正在进行 'DRU'(用于在屏幕上绘制 'U')时

outputWhenCorrect.JPG

  1. 当用户做错了什么

outputWhenWrong.JPG

  1. 当用户已成功完成制作“U”时

outputWhenFinished.JPG

代码

步骤 1:获取 Jar 包

  1. 此处 下载“鼠标手势” jar 文件
  2. 解压缩它并将 dist/mousegestures-1.2.jar 文件添加到您的类路径中

步骤 2:编写代码

  1. 创建 MouseGestures 类的实例

       MouseGestures mouseGestures = new MouseGestures();
  2. 确保您正在监听鼠标右键

         mouseGestures.setMouseButton(MouseEvent.BUTTON3_MASK);

    同样,您可以使用 BUTTON1_MASKBUTTON2_MASK 分别表示鼠标中键和左键

  3. 添加一个 MouseGesturesListener 并编写您的代码。请参阅代码中的注释以获取说明。

    添加 mousegesture 监听器,该监听器具有处理显示相应命令的代码

    mouseGestures.addMouseGesturesListener(new MouseGesturesListener() { 

    覆盖 gestureMovementRecognized 并编写您的代码。 currentGesture 将是一个 string,表示当前鼠标手势集的简短缩写。例如,如果当前的用户手势是向下然后向右,则 currentGesture 将具有 DR

        public void gestureMovementRecognized(String currentGesture) {
            if("DRU".equals(currentGesture)){
                label.setText("    "  + currentGesture + " - 
                          Wow, U have drawn 'U'");
            }
            else if("DRU".startsWith(currentGesture)){
                label.setText("    "  + currentGesture + " - 
                              You need to make a DRU");
            } 
            else{
                label.setText("    "  + currentGesture + " - 
                              Wrong gesture! release your mouse and try again");
            } 
        } 
    //This method is called when the user releases the mouse button finally
    //Just display the current message for a few milliseconds then
    //redisplay the original text
        public void processGesture(String gesture) {
            try { 
                Thread.sleep(400);
            } catch (InterruptedException e) {}
            label.setText(text);
        } 
     }); 
  4. 启动 mouseGesture

       mouseGestures.start();

参考文献

历史

  • 2008 年 6 月 29 日:初始发布
© . All rights reserved.