如何在Swing应用程序中隐藏光标?
2022-08-31 20:32:51
有没有办法隐藏光标(除了使用透明图像作为光标)?
我想隐藏光标,当用户在JFrame中的JPanel之外指向JPanel时。
有没有办法隐藏光标(除了使用透明图像作为光标)?
我想隐藏光标,当用户在JFrame中的JPanel之外指向JPanel时。
Cursor
类似乎没有一个“空白”游标开始,因此可以使用 Toolkit.createCustomCursor
方法定义一个新的“空白”游标。
以下是我尝试过的一种似乎有效的方法:
// 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);
编辑
关于没有游标的结局内的所有内容的注释,似乎包含在中的s最终将继承容器的光标(the ),因此,如果需要有一定的光标出现,则必须手动设置所需的游标。JFrame
Component
JFrame
JFrame
Component
例如,如果 中包含一个,则可以使用 Cursor.getDefaultCursor
方法将其游标设置为系统的默认值:JPanel
JFrame
JPanel
JPanel p = ...
// Sets the JPanel's cursor to the system default.
p.setCursor(Cursor.getDefaultCursor());
tl;博士AWT工具包在2017年仍然存在问题。因此,正确的解决方案是调用
w.setCursor( w.getToolkit().createCustomCursor(
new BufferedImage( 1, 1, BufferedImage.TYPE_INT_ARGB ),
new Point(),
null ) );
相反。
根据Javadoc页面的createCustomCursor
,
创建新的自定义游标对象。如果要显示的图像无效,光标将被隐藏(完全透明),热点将设置为(0,0)。
由此可知,
w.setCursor( w.getToolkit().createCustomCursor( null, null, null ) );
应该做这个把戏。可悲的是,有一个与此情况相关的错误不是由代码处理的,例如 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7150089(这个特定是针对MacOS的,但是通过浏览源代码,您可能会很容易发现在任何平台实现中都没有检查1st参数值有效性;有检查,在这种情况下不会完成它的工作), 因此,通过或无效只会抛出一个 NPEx。Image
Toolkit
tracker.isErrorAny()
null
Image