2011-12-28 174 views
0

可能重复:
Need to create cursor with watermark image半透明光标

有人可以帮我创造摇摆定制半透明光标?我需要为这个光标设置一些图像,例如,如果我在面板上叠加了一些文本,我需要在我的光标下看到这个文本。

+3

我们大多数人都记得http://stackoverflow.com/questions/8645431/need-to-create-cursor-with-watermark-image – mKorbel 2011-12-28 07:33:01

+0

这是不正确的问题,现在我想我更正确地问了 – 2011-12-28 08:28:47

回答

1

这可能会解决你的问题

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; 
} 
+0

谢谢你回答,但这不完全是我的意思,我可以像玻璃一样做我的形象吗? – 2011-12-28 07:51:38

+0

我想,最好在这里发布一部分代码。 – Gokul 2011-12-28 08:18:48

+0

我没有一些特殊的代码,我只是有一个面板,在面板上我有一个按钮,有一些文字,我需要当我的自定义光标移动到按钮上方时,我需要看到图片上的光标和这张图片下的文字它应该像玻璃或水印)。我可以用秋千做到吗? – 2011-12-28 08:35:09

4

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


无论是金属还是默认的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); 
      } 
     }); 
    } 
} 

结果是 - 我错了。使用半透明图标将不是达到目标。

+0

很高兴看到一些代码段 – 2011-12-28 09:30:37

+3

就像在句子开头看到大写字母会很好,最好的代码尝试作为[SSCCE](http://sscce.org/),链接到一个半透明的16x16图标(或至少一个16x16图标).. – 2011-12-28 09:33:22

+0

有趣...会有赌注看到java创建透明游标 - 并且会失去:-)感谢sscce! – kleopatra 2011-12-28 12:29:33