我想用Java为绘图应用程序创建一个自定义鼠标光标。该应用程序需要能够在Windows上运行,由于Windows中与光标大小(32*32px)有关的限制,无法使用内置的cursor功能。
我曾尝试使用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,甚至绘制方法本身,但似乎也不起作用。该面板的一个子项也覆盖了drawComponent方法,我怀疑这也有影响。
需要考虑的几个选项:
- 如何使用分层窗格
- 如何使用JLayer类装饰组件
您需要在玻璃窗格中进行绘制。请参阅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方法调用redipatchMouseEvent(e,true);红点将起到光标的作用。
不幸的是,我发现这在运行Java 1.6的Mac上不起作用,但在运行Java 1.8和Windows的Mac上起作用。