半透明光标

可能重复:
需要用水印图像创建光标

有人可以帮助我在摇摆中创建自定义半透明光标吗? 我需要为这个光标设置一些图像,例如,如果我在面板上重叠一些文本,我需要在光标下看到这个文本。

为光标使用半透明图像。 AFAIU是J2SE理解的唯一支持部分透明的图像类型 – 是PNG。


Metal和默认的Windows PLAF似乎都不支持我理解的任何方式的部分透明度。

import java.awt.*; import java.awt.image.BufferedImage; import javax.swing.*; import javax.imageio.ImageIO; import java.io.File; import java.net.URL; /** The example demonstrates how a semi-transparent image is NOT supported as a cursor image. It is drawn as a solid color. */ class SemiTransparentCursor { public static void main(String[] args) { final BufferedImage biPartial = new BufferedImage( 32, 32, BufferedImage.TYPE_INT_ARGB); Graphics2D g = biPartial.createGraphics(); g.setColor(new Color(255,0,0,63)); int[] x = {0,32,0}; int[] y = {0,0,32}; g.fillPolygon(x,y,3); g.dispose(); final Cursor watermarkCursor = Toolkit.getDefaultToolkit(). createCustomCursor( biPartial, new Point(0, 0), "watermarkCursor"); SwingUtilities.invokeLater(new Runnable() { public void run() { JOptionPane.showMessageDialog( null, new ImageIcon(biPartial)); JEditorPane jep = new JEditorPane(); jep.setPreferredSize(new Dimension(400,400)); jep.setCursor(watermarkCursor); try { URL source = new File("SemiTransparentCursor.java"). toURI().toURL(); jep.setPage(source); } catch(Exception e) { e.printStackTrace(); } JOptionPane.showMessageDialog( null, jep); } }); } } 

结果是 – 我错了。 使用半透明图标无法实现目标。

这可能会解决您的问题

 public Cursor pointer() throws Exception { int[] pixels = new int[16 * 16]; Image image = Toolkit.getDefaultToolkit().createImage( new MemoryImageSource(16, 16, pixels, 0, 16)); Cursor transparentCursor = Toolkit.getDefaultToolkit().createCustomCursor( image, new Point(0, 0), "transparentCursor"); return transparentCursor; }