2014-10-26 170 views
0

我正在为Java中的绘图应用程序创建自定义鼠标光标。该应用程序需要能够在Windows上运行,并且由于与游标大小(32 * 32像素)相关的窗口限制,不可能使用内置游标功能。在Java中定制鼠标光标绘图(swing)

我试图使用MouseMotionListener在当前鼠标位置绘制图像,并且在我将其绘制在空白面板上时使用此图像。图像正确“跟随”鼠标,所以这不是问题。

@Override 
public void paintComponent(Graphics g) {   
    super.paintComponent(g); 
    g.drawImage(cursorimage, x, y, null); 
} 

但是,当我向该面板添加子项时,鼠标光标显示在子项后面。例如,当我添加几个按钮时,鼠标在按钮后面显示其图像。我如何将光标图像移动到前景?

我已经尝试了一些东西像的paintComponent改变顺序:

@Override 
public void paintComponent(Graphics g) {   
    g.drawImage(cursorimage, x, y, null); 
    super.paintComponent(g); 
} 

我也试着重写其他涂料的方法,如paintChildren,paintComponents甚至paint方法本身,但似乎并没有工作。该面板的其中一个子项也有一个drawComponent方法被覆盖,我怀疑这也有影响。

+0

我可能在这里完全错了,但是最近我和另外一位程序员讨论了将AWT和Swing结合使用时指出Z顺序的问题。我不知道这个程序背后的代码,但也许这可能与此有关? – DreadHeadedDeveloper 2014-10-26 18:28:22

+0

我还没有看过。我一定会看到,如果这可能会导致我的问题。谢谢! – Hayeb 2014-10-26 22:39:28

回答

0

您需要在玻璃板作画。如果您修改该源代码,以便mouseMoved方法调用redispatchMouseEvent(e,true);如果您修改了该源代码,则可以调用redispatchMouseEvent(e,true);如果修改该源代码,则mouseMoved方法会调用redispatchMouseEvent(e,true);否则,红点就像一个光标。

不幸的是,我发现这在运行Java 1.6的Mac上不起作用,但它适用于运行Java 1.8和Windows的Mac。