首页 > 解决方案 > 有没有办法为 java Swing 应用程序设置默认鼠标光标图像?

问题描述

我正在使用一个大型 java swing 应用程序。由于可用于应用程序的监视器的限制(空间),客户希望鼠标具有更大的光标图像。

对单个 Swing JFrame 实例执行此操作的方法类似于:

Image image = toolkit.getImage("resources/NetworkGreen48.gif"); Cursor customCursor = toolkit.createCustomCursor(image , new Point(0, 8), "img"); mainJFrame.setCursor (customCursor);

这适用于 mainJFrame JFrame 和嵌入在 mainJFrame JFrame 上的任何组件。

然而,这个应用程序实际上有数百个独立的 JFrame、JDialog 等。对于这些,在同一个 JVM 中运行,但没有主动添加到 mainJFrame JFrame 中,光标恢复为操作系统默认值。

有没有一种好方法可以为 Swing 应用程序中使用鼠标的所有位置设置鼠标光标?

考虑通过与操作系统交谈来做到这一点,但是,这个应用程序目前在 Windows 上运行,并且将来会在某些版本的 linux 上运行,所以我最好不要依赖操作系统。

我可以逐帧执行此操作。只想知道有没有更好的方法。

标签: javaswing

解决方案


第一部分:自定义光标我正在搜索使用外观来定义它,但我没有找到任何关于在里面加载自定义光标的信息,所以有两个解决方案总是使用 JFrame 的自定义子类,其中方法 frameInit 被覆盖以使用你的光标。或者使用工厂创建您需要像以前一样设置属性的所有框架。

Swing 并非完全独立于操作系统,我认为您在使用的操作系统之间几乎看不到渲染差异。唯一认为变化的是外观(laf 或 plaf),每个操作系统都使用自己的 plaf。但是有一个跨 OS Laf 调用 Metal。这是与如何更改 laf 相关的文档:

https://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html

确保跨操作系统,建议使用 Metal 工作,但这不是必需的。


推荐阅读