public void mouseEntered(MouseEvent e)
{
// set cursor for frame and its component
// this is the current frame you are using .
// You can change the this keyword with your frame name .
java.awt.Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit();
Image image = toolkit.getImage("/images/mousepoint.jpg");
Cursor a = toolkit.createCustomCursor(image , new Point(this.getX(),this.getY()), "");
this.setCursor (a);
}
JFrame frame = new JFrame();
frame.setSize(1920, 1080); // set the size
frame.setLocationRelativeTo(null); // center the window
frame.setUndecorated(true); // make it so the frame is a basic rectangle, no topbar or outline.
frame.setAlwaysOnTop(true); // make it so the frame is on top
frame.setOpacity(0.0f); // make the frame transparent.
frame.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
frame.setVisible(true);
6条答案
按热度按时间sqserrrh1#
标准光标图像:
用户定义的图像:
您可以下载包含示例源代码的zip:HERE
aamkag612#
调用Component.setCursor。类Cursor作为一些预定义的游标。
可以创建自定义光标图像:
aurhwmvo3#
尝试将光标设置在rootPane上。
zynd9foi4#
bq3bfh9z5#
为什么你没有一个类MyFrame来扩展JFrame。它所做的就是调用JFrame构造函数并将光标设置为你想要的光标。在我的应用程序中,我们有一个没有光标的触摸屏,所以这就是我打算如何实现它。
wz8daaqr6#
对于所问问题的直接答案(尽我所能),**不,您不能使用Java设置全局游标。**这在很大程度上取决于操作系统,但我认为,出于安全原因,在大多数(如果不是全部)安全操作系统上阻止设置全局游标。
然而,同样重要的是要触及一个方法,我认为会工作,但似乎不工作在我的系统,作为一个64位Windows 10专业版。
受this answer的启发,你可以创建一个完全透明的窗口,将事件传递给它们后面的窗口(见下面的代码示例)。
现在,
Window.setOpacity
的定义表明这是一个依赖于平台的行为,但它具体是关于如何处理MouseEvent,而不是如何处理鼠标光标。然而,根据Windows Documentation,设置光标是基于一个特定的事件,所以我们需要控制哪些事件被传递。因此,这就变成了一个更低级的问题(很可能是C/C++),而不是Java问题。下面是我为测试它而编写的代码示例:
如果将
frame.setOpacity(0.0f);
中的参数从0.0f
设置为0到1之间的某个值,您将看到光标实际上发生了变化。如果你想尝试一下原生语言并使用钩子(也许你不需要深入),也许可以开始here。每当我用C/C++(或任何其他低级语言)编程时,我倾向于让我的代码独立,从不使用WinAPI,也不依赖SDL这样的库,所以我并不精通这些系统级函数是如何工作的。
DR,在标准Java中,你不能这么做。低级选项可以工作。
我想你也可以制作自己的操作系统,甚至把它包含在Java中,这样你就不必在硬盘上安装一个全新的分区。