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

Han*_*ans 0 java mouse move onmousemove

我一直试图创建的效果是,只要鼠标进入JPanel上的某个区域,鼠标光标图标就会改变,并且只要它离开区域就会切换到默认值.我在MouseMotionListener类中使用MouseMoved功能,只要鼠标在JPanel上移动,就会验证坐标是否对应于特殊区域.

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

该程序的作用是在JPanel上绘制图形,当选择"连接"按钮时,如果用户单击一个图形,然后在另一个图形上,则它将这些图形与一条线连接起来.

这些图形在JPanel上绘制,并且存储了各自的区域边界,因此当鼠标移动时,它会检查当前的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));
        }
    }
Run Code Online (Sandbox Code Playgroud)

Ada*_*ski 5

更有效的方法是将一个子项添加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);
Run Code Online (Sandbox Code Playgroud)