java - 如何在Java中有效地跟踪光标位置?

标签 java mouse move onmousemove

我一直试图创建的效果是,每当鼠标进入 JPanel 上的某个区域时,鼠标光标图标就会发生变化,并在离开该区域时切换到默认值。我在 MouseMotionListener 类中使用 MouseMoved 功能,每当鼠标在 JPanel 上 move 时,该功能都会验证坐标是否对应于特殊区域。

但是,这种方法对计算机处理器的压力非常大,所以我想问是否有更有效的方法。任何帮助表示赞赏。

该程序的作用是在 JPanel 上绘制图形,当选择“连接”按钮时,如果用户单击一个图形,然后单击另一个图形,则它会用一条线连接这些图形。

这些图形在 JPanel 上绘制,并存储了各自的区域边界,因此当鼠标 move 时,它会检查当前的 X 和 Y 坐标是否在这些区域之一内,如果是,则更改光标。 checkValidConnectionRegion 检查当前 X 和 Y 变量是否位于图窗区域内。这是处理程序的代码:

public void mouseMoved(MouseEvent e)
    {
        if(GUI.Connectionbutton.isSelected())
        {
            x = e.getX();
            y = e.getY();

            checkValidConnectionRegion(); 

            if(validConnectionRegion)
                setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
            if(!validConnectionRegion)
                setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
        }
    }

最佳答案

更有效的方法是将子 JPanel 添加到父 JPanel 中,它将充当不可见区域。然后只需将光标设置在子 JPanel 上,当您移到它上面时,鼠标指针就会发生变化。

JPanel mainPnl = new JPanel(new BorderLayout());

JPanel invisibleArea = new JPanel();
invisibleArea.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
invisibleArea.setPreferredSize(new Dimension(100, 100));

mainPnl.add(invisibleArea, BorderLayout.WEST);

关于java - 如何在Java中有效地跟踪光标位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1332422/

相关文章:

java - 剪刀石头布变量无法识别且程序以JAVA结尾

java - 如何获取此 JSON 对象并将其解析为 Android textview

java - 耶拿多个 rdfs :label

java - Hibernate + H2 数据库 + SpringBoot : Pre-existing tables in database are always dropped & re-created upon start, 即使对于 hbm2ddl = 验证

c++ - 使用 dlib 记录鼠标位置

cocoa - 在Cocoa中,当鼠标被按住(但不移动)时,我的NSView如何接收事件?

c++ - QGraphicsItem 鼠标中键按下事件

windows - 在批处理文件中复制( move )文件的快速方法

c++ - 将 unique_ptr<Derived>& 传递给接受 unique_ptr<Base>& 的函数

c++ - 为什么在构造 std::thread 时参数 move 了两次