为什么当我将图像设置为光标时,它不起作用?
我在Java的新的,我有一个问题想的图像设置光标。我使用的是BufferedImage
和Graphics.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
类型,但仍然无法正常工作。 你能帮我解决这个问题吗?我需要做些什么才能使它工作?
这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);
}
}
我怀疑你曲解的Toolkit.createCustomCursor(Image cursor, Point hotSpot, String name)第二个参数:
hotSpot
- 大光标热点的X和Y; 热点值必须小于由getBestCursorSize
的hotspot
返回的尺寸是指相对于所述光标图像的左上角, 不到面板的左上角。 所以,与其
new Point(mainPanel.getX(), mainPanel.getY())
只是尝试
new Point(0, 0)
非常感谢,你说得对,我误解了。我已经纠正它,但它不是我的问题的原因。因为我只需要复制按钮图像并在光标上绘制它,但它只绘制一个带有颜色的圆而不是完整的PNG图像。 非常感谢您的意见。 –
@DarthHollow然后,你的图像仍然存在问题。您应该将这些添加到您的问题以获得良好的答案。 –
谢谢你的建议,我已经把问题形象化了。 –
在Windows上,你是限制为32×32的光标大小 - 它可能已经改变,但在Windows 7下是这样的话/ Java 7的 – MadProgrammer
您在彼此的顶部绘制图像。 你确定他们有适当的透明度吗? 可能是最后一张图片完全覆盖了之前的所有图片。 –
1)为了更好地帮助越早,张贴[MCVE]或[简要,独立的,正确的示例](http://www.sscce.org/)。 2)获取图像的一种方法是通过[本问答](http://stackoverflow.com/q/19209650/418556)中的图像进行热链接。尽管在这种情况下,您可能会热插入问题中嵌入的图像。 –