2011-12-28 178 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