gpt4 book ai didi

Java 应用程序托盘图标在 CentOS 上无法正确显示

转载 作者:太空狗 更新时间:2023-10-29 12:29:46 26 4
gpt4 key购买 nike

我编写了一个可在 Windows 和 Linux 上使用的 Java 应用程序。该应用程序使用 TrayIcon。在 Windows 上,这非常有效,但在 Linux (CentOS) 上,TrayIcon 有两个问题:1) 我的 png 图像失去了透明度)和 2) 图像看起来像是向上移动了(稍后会详细介绍)。

我通过获取托盘图标大小然后相应地缩放来考虑不同的环境。这是我的代码:

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 时会向上移动。

有什么办法可以保持背景透明?另外,关于动态获取适当大小的图标有什么建议吗?

最佳答案

大小

尽管 documentation指出 SystemTray.getTrayIconSize()“返回托盘图标将在系统托盘中占据的空间的大小(以像素为单位)”,该实现实际上返回一个常量值,具体取决于操作系统。

这是XSystemTrayPeer.java中方法的实际实现(Oracle JRE 1.8,OpenJDK类似):

public Dimension getTrayIconSize() {
return new Dimension(24, 24);
}

但这不是 Linux 限制。 Windows 特定实现返回 16x16 的常量维度。但是,虽然大多数 Windows 系统实际上似乎都坚持这个尺寸,但大量的 Linux 桌面也配备了同样种类繁多的各种形状和大小的系统托盘。因此,该方法容易出错并且不能依赖。

透明度

系统托盘的 X11 实现不支持透明度。参见 this answerthis bug report了解详情。

备选方案

看看dorkbox/SystemTray .它是一个 Apache 2.0 许可的托盘库,也可以通过 Maven/Gradle 获得。它支持所有平台上的动态缩放和透明性,还支持 AppIndicator。我不隶属于该项目。

关于Java 应用程序托盘图标在 CentOS 上无法正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30925897/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com