系统托盘图标看起来扭曲

Cli*_*ote 17 java icons swing trayicon system-tray

我正在尝试使用Java添加一个图标并显示到系统托盘中.但是,图标总是太小,或者在区域中被切断.它是左起第二个你无法分辨的情况.

我在这做错了什么?如何让这个图标完全显示?系统托盘使用的标准图标大小是多少?

编辑:我正在使用AWT SystemTray和TrayIcon

Red*_*ite 27

从磁盘检索实际图像资源后,您可以通过即时创建"假"并获取其宽度来将其调整为所需大小.

我发现这比使用该setImageAutoSize(true)方法更好,因为该方法根本不能平滑地缩放图像.

BufferedImage trayIconImage = ImageIO.read(getClass().getResource("/path/to/icon.png"));
int trayIconWidth = new TrayIcon(trayIconImage).getSize().width;
TrayIcon trayIcon = new TrayIcon(trayIconImage.getScaledInstance(trayIconWidth, -1, Image.SCALE_SMOOTH));
Run Code Online (Sandbox Code Playgroud)


FTh*_*son 9

要以最佳尺寸显示图标,您需要手动将其调整为正确的大小.这种正确的大小可能因操作系统和首选项而异,因此Java提供了一种获取任务栏图标尺寸的方法,对于示例图像,这些尺寸为16x16.

if (SystemTray.isSupported()) {
    SystemTray tray = SystemTray.getSystemTray();
    Dimension trayIconSize = tray.getTrayIconSize();
    // resize icon image to trayIconSize
    // create your tray icon off of the resized image
}
Run Code Online (Sandbox Code Playgroud)


And*_*son 8

根据TrayIcon.setImageAutoSize(boolean).

设置auto-size属性.自动尺寸确定托盘图像是否自动调整大小以适合托盘上图像的分配空间.默认情况下,auto-size属性设置为false.

如果auto-size为false,并且图像大小与托盘图标空间不匹配,则图像将按原样绘制在该空间内 - 如果大于分配的空间,则将对其进行裁剪.

  • +1 ...虽然*最简单的*解决方案是将托盘图标设置为自动调整大小,但遗憾的是,在内部,它似乎使用了一种不流畅的算法,大多数人会觉得这对生产使用是不可接受的.自动调整大小的图像将不平滑并具有锯齿状边缘.我怀疑这是出于性能原因.我通常手动调整大小:http://stackoverflow.com/a/12287388/216104 (5认同)