gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:00:00 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com