Java中光标周围的黄色圆圈

我想弄清楚如何在Java中的游标周围制作一个黄色圆圈。事情是,我们有一个(显然)记录屏幕的屏幕录像机。在Google上使用关键词“Java中光标的黄色圆圈”只会让我学习如何在MAC,WM和其他应用程序上的光标周围添加一个黄色圆圈,而不是在用户计算机上如何在Java中执行申请开始。

如何在不使用现有图像的情况下做到这一点?用一些不透明度绘制一个简单的黄色圆圈将是最容易的事情,使它跟随屏幕上的鼠标。而且,如果可以使其消失并在用户单击鼠标按钮时重新出现,那就太棒了。

0
额外 编辑
意见: 1
你有没有找到解决方案?
额外 作者 coding_idiot,
@ michael667好吧,因为除了如何改变实际的光标之外我找不到任何东西,所以很难真正尝试做某件事。我还没有找到任何真正的例子或理论如何去做。而且我的JAVA知识也不是那么先进。我通常开发网站。
额外 作者 Nemo Caligo,
@Subs如果你的意思是Swing,那么是的,即使我不确定这将如何帮助我找出使用什么类来使光标更清晰可见。事情是Java swing库是巨大的。我的意思是,找到鼠标听众很容易。但是很难弄清楚如何围绕鼠标做一个圆圈。
额外 作者 Nemo Caligo,
@Sub,这是真的,但是,我仍然不确定如何使该面板始终遵循鼠标。另外,我不确定它是否可以像JavaScript一样工作,您需要使用mouseMove事件并更改该面板的x | y位置,获取鼠标的x | y坐标并使面板位于x | y位置中心坚持鼠标x | y的位置。如果这样做,对使用该应用程序的计算机的要求是否过高,或者使用该应用程序的用户是否会注意到任何延迟?这就是所有的理论,即使我知道如何在理论上做到这一点,我也没有丝毫的想法如何在代码中做到这一点。
额外 作者 Nemo Caligo,
是的,检查下面的答案。这是最简单的方法。
额外 作者 Nemo Caligo,
您是否听说过 Swings
额外 作者 Subs,
@NanashiDri,如果你知道那么你应该知道你可以把一个透明面板作为顶层,并从鼠标指针位置画一个圆圈,当你点击鼠标按钮时( mousePressed ) - 隐藏透明面板,以便现在你的后面(主)面板接受你的 mousereleased 事件。
额外 作者 Subs,

2 答案

无法在现有的鼠标指针周围添加一个圆圈。您只能将鼠标指针设置为完整的图像。

0
额外
感谢您的回答,但恐怕这不是解决方案。如果我在搜索时找到答案,我不会在这里问。问题是我不想完全改变鼠标光标。我只想在它周围创建一个黄色圆圈。而我的问题是如果没有使用图像可能。
额外 作者 Nemo Caligo,
得到它了。感谢你的回答。我会将你的答案标记为这个问题的答案,因为我不认为有可能将评论标记为已接受的答案。
额外 作者 Nemo Caligo,
无法在现有的鼠标指针周围添加一个圆圈。您只能将鼠标指针设置为完整的图像。
额外 作者 michael667,

可以通过将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/mouseReleased/mouseClicked事件,你需要使它消失/重新出现在用户的鼠标点击上。

使用XOR非常方便,因为通过重新绘制相同形状的相同颜色和样式来恢复屏幕非常简单,但它并不完全符合您的要求。可以通过捕获将要绘制圆的区域的图像来修复屏幕。通过在新位置绘制圆圈之前重新绘制损坏的区域,可以将圆圈从屏幕上移除。

0
额外
getGraphics()它来自哪里?
额外 作者 coding_idiot,
你能发布一个完整的工作示例吗?我尝试了一些,但没有成功。
额外 作者 coding_idiot,
getGraphics()最初来自java.awt.Component,但此代码需要一个返回Graphics2D实例的子类,如javax.swing.JComponent
额外 作者 richj,
我的答案中的代码只是为实现MouseMotionListener的类实现mouseMoved(...)。如果你需要一个完整的工作示例Java应用程序,这个Java教程提供了一个很好的起点: docs.oracle.com/javase/tutorial/uiswing/events/… - 您应该可以用我的代码替换mouseMoved的存根实现。
额外 作者 richj,