我正在使用以下代码在Windows和Linux中设置任务栏图标。它在Windows中效果很好,在Linux中效果很好。在Linux(Ubuntu)中,我将面板设置为(某种程度上)透明,并且当我添加GIF(具有透明背景)时,图标的背景显示为灰色和丑陋的所有颜色(参见图像,绿色菱形“!”)。 …有关如何制作GIF图片的任何想法,我要“保留”其透明背景?
替代文字http://unarm.org/stackoverflow/panel_task.jpg
以及我使用的图像(如果要测试):
替代文字http://unarm.org/stackoverflow/green_info.gif
import java.awt.*; import java.awt.event.*; public class TrayFun { static class ShowMessageListener implements ActionListener { TrayIcon trayIcon; String title; String message; TrayIcon.MessageType messageType; ShowMessageListener( TrayIcon trayIcon, String title, String message, TrayIcon.MessageType messageType) { this.trayIcon = trayIcon; this.title = title; this.message = message; this.messageType = messageType; } public void actionPerformed(ActionEvent e) { trayIcon.displayMessage(title, message, messageType); } } public static void main(String args[]) { Runnable runner = new Runnable() { public void run() { if (SystemTray.isSupported()) { final SystemTray tray = SystemTray.getSystemTray(); Image image = Toolkit.getDefaultToolkit().getImage("green_info.png"); PopupMenu popup = new PopupMenu(); final TrayIcon trayIcon = new TrayIcon(image, "The Tip Text", popup); trayIcon.setImageAutoSize(true); MenuItem item = new MenuItem("Close"); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { tray.remove(trayIcon); } }); popup.add(item); try { tray.add(trayIcon); } catch (AWTException e) { System.err.println("Can't add to tray"); } } else { System.err.println("Tray unavailable"); } } }; EventQueue.invokeLater(runner); } }
此问题很可能无法解决。这取决于Java是否在Linux中创建托盘子窗口方面做得不错。如果Jave做错了,则绘制图像时透明度已经丢失。
您使用的图标的实际背景值是多少?上面显示的是灰色吗?将其设置为紫色,以查看是否使用了图像的透明度(Java默认为灰色背景)。
确保您尝试了PNG的两个透明度选项:透明颜色索引以及Alpha通道。Alpha通道在Linux中非常常见,而在Windows世界中则不是如此。
您的图标的分辨率太小。在64x64或更好的128x128中进行。AFAIK托盘图标没有标准分辨率,即使是,也肯定不是16x16。
您可以尝试使用的另一种格式是SVG。仅在确保图像的透明度是问题所在后再尝试操作(请参阅1)。
有关此问题的背景信息,请参见此处:http : //www.rasterman.com/index.php? page =News(向下滚动到2006年2月2日)