2017-04-14 108 views
1

我在Java的新的,我有一個問題想的圖像設置光標。我使用的是BufferedImageGraphics.drawImage但它只能繪製圖像的顏色和不完整的png圖片。爲什麼當我將圖像設置爲光標時,它不起作用?

這裏是我的代碼:

/*The images List*/ 
iconsBet.add(ImageIO.read(getClass().getResource("/resources/ChipType"+ String.valueOf(maxChipBet+1) +".png"))); 
/*The images List*/ 

BufferedImage output = new BufferedImage(iconsBet.get(0).getWidth(), iconsBet.get(0).getHeight(), BufferedImage.TYPE_INT_ARGB); 
Graphics graphicsCursorIcon = output.getGraphics(); 

int count = 0; 
for(BufferedImage icon : iconsBet) 
{     
    graphicsCursorIcon.drawImage(icon, 0, count*10, null); 
    count++; 
} 

graphicsCursorIcon.dispose(); 
Toolkit toolkit = Toolkit.getDefaultToolkit(); 
Cursor c = toolkit.createCustomCursor(output , new Point(mainPanel.getX(), mainPanel.getY()), "img"); 
mainPanel.setCursor(c); 

的圖像:This is one image from the group of images that I'm using

程序只畫一個紅圈,而不是PNG圖像。

我已經嘗試使用所有BufferedImage類型,但仍然無法正常工作。 你能幫我解決這個問題嗎?我需要做些什麼才能使它工作?

+0

在Windows上,你是限制爲32×32的光標大小 - 它可能已經改變,但在Windows 7下是這樣的話/ Java 7的 – MadProgrammer

+0

您在彼此的頂部繪製圖像。 你確定他們有適當的透明度嗎? 可能是最後一張圖片完全覆蓋了之前的所有圖片。 –

+0

1)爲了更好地幫助越早,張貼[MCVE]或[簡要,獨立的,正確的示例](http://www.sscce.org/)。 2)獲取圖像的一種方法是通過[本問答](http://stackoverflow.com/q/19209650/418556)中的圖像進行熱鏈接。儘管在這種情況下,您可能會熱插入問題中嵌入的圖像。 –

回答

2

這MCVE在這裏工作,但它縮小光標向下一個更小的尺寸。

import java.awt.*; 
import java.awt.image.*; 
import java.io.IOException; 
import javax.imageio.*; 
import javax.swing.*; 
import javax.swing.border.EmptyBorder; 
import java.net.URL; 

public class CustomImageCursor { 

    private JComponent ui = null; 

    CustomImageCursor() { 
     initUI(); 
    } 

    public void initUI() { 
     if (ui != null) { 
      return; 
     } 

     ui = new JPanel(new BorderLayout(4, 4)); 
     ui.setBorder(new EmptyBorder(40, 400, 40, 40)); 

     try { 
      BufferedImage bi = ImageIO.read(
        new URL("https://i.stack.imgur.com/b89MA.png")); 
      Toolkit toolkit = Toolkit.getDefaultToolkit(); 
      Cursor c = toolkit.createCustomCursor(bi, new Point(0, 0), "img"); 
      ui.setCursor(c); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public JComponent getUI() { 
     return ui; 
    } 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (Exception useDefault) { 
       } 
       CustomImageCursor o = new CustomImageCursor(); 

       JFrame f = new JFrame(o.getClass().getSimpleName()); 
       f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
       f.setLocationByPlatform(true); 

       f.setContentPane(o.getUI()); 
       f.pack(); 
       f.setMinimumSize(f.getSize()); 

       f.setVisible(true); 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
} 
5

我懷疑你曲解的Toolkit.createCustomCursor(Image cursor, Point hotSpot, String name)第二個參數:

hotSpot - 大光標熱點的X和Y; 熱點值必須小於由getBestCursorSize

hotspot返回的尺寸是指相對於所述光標圖像的左上角, 不到面板的左上角。 所以,與其

new Point(mainPanel.getX(), mainPanel.getY()) 

只是嘗試

new Point(0, 0) 
+0

非常感謝,你說得對,我誤解了。我已經糾正它,但它不是我的問題的原因。因爲我只需要複製按鈕圖像並在光標上繪製它,但它只繪製一個帶有顏色的圓而不是完整的PNG圖像。 非常感謝您的意見。 –

+0

@DarthHollow然後,你的圖像仍然存在問題。您應該將這些添加到您的問題以獲得良好的答案。 –

+0

謝謝你的建議,我已經把問題形象化了。 –

相關問題