Java Swing:如何将自定义光标设置为透明?
我正在使用PNG图像(具有透明度)更改光标,但是当我运行下面的代码时,图像看起来不应该这样Java Swing:如何将自定义光标设置为透明?,java,swing,user-interface,mouse-cursor,Java,Swing,User Interface,Mouse Cursor,我正在使用PNG图像(具有透明度)更改光标,但是当我运行下面的代码时,图像看起来不应该这样 public void CustomCursor() { Toolkit t1 = Toolkit.getDefaultToolkit(); Image img = t1.getImage("src/AppImages/Cursor1.png"); Point point = new Point(0,0); Cursor cursor = t1.crea
public void CustomCursor()
{
Toolkit t1 = Toolkit.getDefaultToolkit();
Image img = t1.getImage("src/AppImages/Cursor1.png");
Point point = new Point(0,0);
Cursor cursor = t1.createCustomCursor(img, point, "Cursor");
setCursor(cursor);
}
此方法在Jframe的构造函数中调用
这是cursor1.png
图像,大小为25x25px
运行代码后:
如果我使用cursor1.png
作为JLabel
,它看起来还可以:
MCVE
有人能告诉我为什么会这样吗?问题是Windows;透明像素只是没有被考虑在内 关于如何解决这个问题,有一个非常好的答案。
另一个很好的答案。很有趣。。作为光标,图像半透明像素似乎是以纯色“填充”的-但如果它显示在
JLabel
中,则不会出现这种情况。顺便说一句-我添加了我在其中看到这些结果的-以便于其他人运行。@zmkan刚刚在MAC上试用过它-它看起来与标签完全一样。看起来这个问题可能与平台有关。@KDM也许你是对的。我在Windows 7上的Netbeans上使用Jframe的绝对布局。有没有办法解决这个问题?@AndrewThompson将转换后的图像上载到-请尝试一下并告诉我。蒂亚。
import java.awt.*;
import java.net.*;
import java.util.logging.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
public class CustomCursor {
private JComponent ui = null;
CustomCursor() {
initUI();
}
public void initUI() {
if (ui != null) {
return;
}
ui = new JPanel(new BorderLayout(4, 4));
ui.setBorder(new EmptyBorder(20, 200, 20, 200));
Toolkit t1 = Toolkit.getDefaultToolkit();
Image img;
try {
URL url = new URL("http://i.stack.imgur.com/sJKuE.png");
img = t1.getImage(url);
Point point = new Point(0, 0);
Cursor cursor = t1.createCustomCursor(img, point, "Cursor");
ui.setCursor(cursor);
ui.add(new JLabel(new ImageIcon(url)));
} catch (MalformedURLException ex) {
Logger.getLogger(CustomCursor.class.getName()).log(Level.SEVERE, null, ex);
}
}
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) {
}
CustomCursor o = new CustomCursor();
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);
}
}