18

我正在尝试使用 Java 添加图标并将其显示到系统托盘中。但是,图标总是太小,或者在某些区域被截断。它是左数第二个,以防你无法分辨。

我在这里做错了什么?我怎样才能让这个图标完全显示?用于系统托盘的标准图标大小是多少?

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

4

4 回答 4

30

从磁盘检索实际图像资源后,您可以通过动态创建“假”图像资源并获取其宽度来将其调整为所需的大小。

我发现这比使用该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));
于 2012-09-05T18:13:07.943 回答
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
}
于 2012-09-05T18:00:36.763 回答
9

根据TrayIcon.setImageAutoSize(boolean).

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

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

于 2012-09-05T18:13:35.343 回答
2

我最终结合了其中一些答案来制作我正在使用的代码。

这会在我的系统托盘中从 100x100 开始的 png 生成一个好看的图标。

值得注意的是,在视网膜 MacBook 上,按比例缩小的图标看起来更糟。因此,我在其他地方进行了检查,以查看它是否在 Mac 上运行,如果是,请不要应用它。

public Image imageForTray(SystemTray theTray){

    Image trayImage = Toolkit.getDefaultToolkit().getImage("my100x100icon.png");
    Dimension trayIconSize = theTray.getTrayIconSize();
    trayImage = trayImage.getScaledInstance(trayIconSize.width, trayIconSize.height, Image.SCALE_SMOOTH);

    return trayImage;
}
于 2013-12-12T18:24:57.220 回答