用Java自定义鼠标光标(swing)

时间:2014-10-26 15:04:24

标签: java swing custom-painting

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

我尝试使用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方法,我怀疑它也有影响。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

您需要在玻璃窗格中进行绘画。请参阅Java教程 http://docs.oracle.com/javase/tutorial/uiswing/components/rootpane.html 源代码在 http://docs.oracle.com/javase/tutorial/uiswing/examples/components/GlassPaneDemoProject/src/components/GlassPaneDemo.java 如果修改该源代码,则mouseMoved方法调用redispatchMouseEvent(e,true);红点就像一个光标。

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