java程序中隐藏光标隐藏光标_java-如何在Swing应用程序中隐藏光标?

这篇博客讨论了在Java Swing应用程序中隐藏光标的不同方法,包括使用透明图像、创建自定义空光标以及针对特定平台(如MacOS)的解决方案。作者提到了一些代码示例,如创建一个1x1像素的透明图像作为光标,或者利用Toolkit创建自定义光标,以实现光标的隐藏效果。
摘要由CSDN通过智能技术生成

java-如何在Swing应用程序中隐藏光标?

有没有一种隐藏光标的方法(除了使用透明图像作为光标之外)?

Jessy asked 2020-07-23T18:49:53Z

6个解决方案

66 votes

看来Cursor.getDefaultCursor类没有开始的“空白”光标,因此可以使用Cursor.getDefaultCursor方法定义一个新的“空白”光标。

这是我尝试过的一种似乎有效的方法:

// Transparent 16 x 16 pixel cursor image.

BufferedImage cursorImg = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB);

// Create a new blank cursor.

Cursor blankCursor = Toolkit.getDefaultToolkit().createCustomCursor(

cursorImg, new Point(0, 0), "blank cursor");

// Set the blank cursor to the JFrame.

mainJFrame.getContentPane().setCursor(blankCursor);

编辑

关于Cursor.getDefaultCursor内部没有光标的所有内容的注释,似乎JPanel中包含的JFrames最终将继承容器的光标(JFrame),因此,如果要求具有一定的Component 如果出现光标,则必须手动设置所需的光标。

例如,如果JFrame中包含Cursor.getDefaultCursor,则可以使用Cursor.getDefaultCursor方法将JPanel的光标设置为系统的默认值:

JPanel p = ...

// Sets the JPanel's cursor to the system default.

p.setCursor(Cursor.getDefaultCursor());

coobird answered 2020-07-23T18:50:26Z

6 votes

tl; dr AWT工具包在2017年仍然存在漏洞。 因此,正确的解决方案是致电

w.setCursor( w.getToolkit().createCustomCursor(

new BufferedImage( 1, 1, BufferedImage.TYPE_INT_ARGB ),

new Point(),

null ) );

代替。

按照Image的Javadoc页面,

创建一个新的自定义光标对象。 如果要显示的图像无效,则光标将被隐藏( 完全透明),并将热点设置为(0,0)。

随之而来的是

w.setCursor( w.getToolkit().createCustomCursor( null, null, null ) );

应该可以。 可悲的是,有一个与这种情况有关的错误未由代码处理,请参见例如 [http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7150089](此信息适用于MacOS,但是通过浏览源代码,您可以轻松地发现没有检查第一参数Image值有效性的任何一种 Toolkit平台实现;检查tracker.isErrorAny(),在这种情况下不起作用),因此传递null或无效Image只会引发NPEx。

vaxquis answered 2020-07-23T18:51:08Z

3 votes

在Mac OS上使用LWJGL时,您需要执行以下操作:

System.setProperty("apple.awt.fullscreenhidecursor","true");

Lenar Hoyt answered 2020-07-23T18:51:28Z

3 votes

frame.setCursor(frame.getToolkit().createCustomCursor(

new BufferedImage(3, 3, BufferedImage.TYPE_INT_ARGB), new Point(0, 0),

"null"));

Dennis answered 2020-07-23T18:51:44Z

2 votes

在文档中说,如果图像无效,则默认情况下它将是透明的,因此传递空图像将导致透明的光标。 但是,将null传递给该图像的方法将导致异常。

Toolkit tk= getToolkit();

Cursor transparent = tk.createCustomCursor(tk.getImage(""), new Point(), "trans");

vandale answered 2020-07-23T18:52:04Z

1 votes

我更容易解决此问题:

final Timer cursorTimer = new Timer(2000, new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

getContentPane().setCursor(null);

}

});

cursorTimer.start();

addMouseMotionListener(new MouseMotionAdapter() {

@Override

public void mouseMoved(MouseEvent e) {

getGlassPane().setCursor(Cursor.getDefaultCursor());

cursorTimer.restart();

}

});

swap_i answered 2020-07-23T18:52:24Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值