Java中围绕光标的黄色圆圈
我试图弄清楚如何在Java中围绕光标画一个黄色圆圈。问题是我们有一个屏幕记录器(显然)记录屏幕。在Google上使用关键字“在Java中围绕光标的黄色圆圈”只会让我了解如何在MAC、WM和其他应用程序上围绕光标添加黄色圆圈,而不是在应用程序启动时如何在用户计算机上使用JavaJava中围绕光标的黄色圆圈,java,cursor,geometry,marker,Java,Cursor,Geometry,Marker,我试图弄清楚如何在Java中围绕光标画一个黄色圆圈。问题是我们有一个屏幕记录器(显然)记录屏幕。在Google上使用关键字“在Java中围绕光标的黄色圆圈”只会让我了解如何在MAC、WM和其他应用程序上围绕光标添加黄色圆圈,而不是在应用程序启动时如何在用户计算机上使用Java 如何在不使用现有图像的情况下执行此操作?画一个简单的黄色圆圈和一些不透明度将是最简单的事情做,使它跟随鼠标在屏幕上。而且,如果用户单击鼠标按钮时可以使其消失并重新出现,那就太棒了。不可能在现有鼠标指针周围添加圆圈。您只能将
如何在不使用现有图像的情况下执行此操作?画一个简单的黄色圆圈和一些不透明度将是最简单的事情做,使它跟随鼠标在屏幕上。而且,如果用户单击鼠标按钮时可以使其消失并重新出现,那就太棒了。不可能在现有鼠标指针周围添加圆圈。您只能将鼠标指针设置为一个完整的图像。可以通过将MouseMotionListener附加到您的组件来实现这一点,但需要做一些工作才能使其完全按照您想要的方式工作 我将从以下内容开始:
private static final double RADIUS = 15.0;
private static final double DIAMETER = 2.0 * RADIUS;
private static final Color XOR_COLOR = Color.yellow;
private static Shape m_circle = null;
@Override
public void mouseMoved(MouseEvent e)
{
Graphics2D g2 = (Graphics2D) getGraphics();
Point p = e.getPoint();
Shape circle = new Ellipse2D.Double(p.getX() - RADIUS, p.getY() - RADIUS, DIAMETER, DIAMETER);
clearCircle(g2);
g2.setXORMode(XOR_COLOR);
g2.draw(circle);
g2.setPaintMode();
m_circle = circle;
}
private void clearCircle(Graphics2D g2)
{
if (m_circle != null)
{
g2.setXORMode(XOR_COLOR);
g2.draw(m_circle);
g2.setPaintMode();
m_circle = null;
}
}
还需要确保在mouseExited事件上清除旧圆圈,您可以通过添加MouseListener来侦听该事件。它还有mousePressed/mousererelease/mouseClicked事件,您需要这些事件来让它在用户的鼠标单击时消失/重新出现
使用XOR很方便,因为通过使用相同的颜色和样式重新绘制相同的形状可以很容易地恢复屏幕,但这并不是您想要的。可以通过捕捉将要画圆的区域的图像来修复屏幕。在新位置绘制圆之前,可以通过重新绘制受损区域将圆从屏幕上删除。你听说过
摆动吗?@michael667好吧,因为除了如何更改实际光标之外,我找不到任何其他方法,所以很难真正尝试做一些事情。我还没有找到任何关于如何做到这一点的实际例子或理论。我的JAVA知识也不是那么先进。我通常开发网站。@Subs如果你指的是Swing,那么是的,尽管我不确定这将如何帮助我确定使用哪个类使光标更可见。问题是JavaSwing库有点庞大。我的意思是,很容易找到鼠标侦听器。。但是,要想在鼠标周围画一个圆圈就更难了。@NanashiDri,如果你知道的话,那么你应该知道你可以把一个透明的面板作为顶层,从鼠标指针的位置画一个圆圈,当你点击(mousePressed
)时,隐藏透明的面板,这样你的后背(main)就可以了面板接受您的mousererelease
事件。@Sub,这是真的,不过,我仍然不知道如何使面板始终跟随鼠标。另外,我不确定它是否能像JavaScript中那样工作,即执行mouseMove事件并更改面板的x | y位置,获取鼠标的x | y坐标,并使面板的中心x | y位置与鼠标的x | y位置保持一致。如果这样做行得通,对使用该应用程序的计算机来说会不会太苛刻,或者使用该应用程序的用户不会注意到任何延迟?这些都是理论,即使我知道如何在理论上做到这一点,我也不知道如何在代码中实现它。谢谢你的回答,但恐怕这不是解决办法。如果我在搜索时找到了答案,我就不会在这里问了。问题是我不想完全改变鼠标光标。我只想在它周围画一个黄色的圆圈。我的问题是,如果不使用图像,这是否可能。不可能在现有鼠标指针周围添加一个圆圈。你只能将鼠标指针设置为一个完整的图像。明白了。谢谢你的回答。我将把你的答案标记为这个问题的答案,因为我认为不可能将评论标记为可接受的答案。getGraphics()
它来自哪里?你能发布一个完整的工作示例吗?我尝试了一些东西,但没有成功。getGraphics()最初来自java.awt.Component,但这段代码需要一个子类来返回Graphics2D实例,例如javax.swing.jComponent。我的答案中的代码只是实现MouseMotionListener的类的mouseMoved(…)的实现。如果您需要一个完整的工作示例Java应用程序,本Java教程提供了一个很好的起点:-您应该能够用我的代码替换mouseMoved的存根实现。