Java应用程序托盘图标在CentOS上未正确显示
我已经编写了一个Java应用程序,可以在Windows和Linux上使用。该应用程序使用TrayIcon。在Windows上,这一点非常有效,但在Linux(CentOS)上,TrayIcon有两个问题:1)我的png图像失去了透明度;2)图像看起来像是上移了(稍后将对此进行详细介绍) 我通过获得托盘图标的大小,然后相应地进行缩放,从而考虑到不同环境的影响。这是我的密码:Java应用程序托盘图标在CentOS上未正确显示,java,linux,image,trayicon,Java,Linux,Image,Trayicon,我已经编写了一个Java应用程序,可以在Windows和Linux上使用。该应用程序使用TrayIcon。在Windows上,这一点非常有效,但在Linux(CentOS)上,TrayIcon有两个问题:1)我的png图像失去了透明度;2)图像看起来像是上移了(稍后将对此进行详细介绍) 我通过获得托盘图标的大小,然后相应地进行缩放,从而考虑到不同环境的影响。这是我的密码: Dimension trayIconSize = tray.getTrayIconSize(); Image origina
Dimension trayIconSize = tray.getTrayIconSize();
Image originalImage = toolkit.getImage("tray_icon.png");
Image scaledImage = originalImage.getScaledInstance(trayIconSize.width, trayIconSize.height, Image.SCALE_SMOOTH);
trayIcon = new TrayIcon(scaledImage, "Some Text");
在CentOS上,.getTrayIconSize()的返回维度为24x24,但经过测试后,它实际上适合24x32(WxH)图像,这说明当设置为24x24时图像出现上移
有没有办法保持背景的透明度?另外,对于动态获取适当大小的图标有什么建议吗?大小
尽管SystemTray.getTrayIconSize()声明“返回托盘图标将在系统托盘中占据的空间大小(以像素为单位)”,但该实现实际上返回一个常量值,具体取决于操作系统
这是XSystemTrayPeer.java中方法的实际实现(Oracle JRE 1.8,OpenJDK类似):
但是,这不是Linux的限制。特定于Windows的实现返回16x16的常量维度。但是,尽管大多数Windows系统实际上似乎都保持这种大小,但大量的Linux台式机也配备了各种形状和大小的系统托盘。因此,该方法容易出错,不能依赖
透明度
系统托盘的X11实现中不支持透明度。有关详细信息,请参阅和
备选方案
看一看。它是Apache2.0许可的托盘库,也可以通过Maven/Gradle获得。它支持所有平台上的动态缩放和透明度,还支持AppIndicator。我与这个项目无关
public Dimension getTrayIconSize() {
return new Dimension(24, 24);
}