我正在使用大型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,JDialogs等。对于这些,它们在同一JVM中运行,但未主动添加到mainJFrame JFrame中,因此光标恢复为操作系统默认值。
是否有一种很好的方法来为Swing应用程序中将使用鼠标的所有位置设置鼠标光标?
考虑通过与操作系统进行通信来实现此目的,但是,此应用程序当前正在Windows上运行,并且将来会在某些版本的linux上运行,因此我最好不要依赖于该操作系统。
我可以逐帧执行此操作。只是想知道是否有更好的方法。
答案 0 :(得分:0)
第一部分:自定义光标 我正在尝试使用外观来定义它,但是我没有找到关于在其中放置自定义光标的任何信息,因此有2种解决方案始终使用JFrame的自定义子类,其中方法frameInit被重写以使用您的光标。或使用工厂创建您需要设置属性所需的所有框架。
Swing并不完全独立于os,我认为您所使用的os之间几乎没有渲染差异。唯一认为更改是外观(laf或plaf),每个OS都使用自己的plaf。但是有一个跨OS Laf的电话,称为Metal。这是有关如何更改laf的文档:
https://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
为了确保可以跨操作系统使用,建议使用Metal来运行它,但这不是必需的。