我一直试图创建的效果是,每当鼠标进入 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/