2017-04-14 68 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

谢谢你的建议,我已经把问题形象化了。 –

相关问题