系统托盘图标看起来扭曲

时间:2012-09-05 17:56:11

标签: java swing icons system-tray trayicon

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

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

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

4 个答案:

答案 0 :(得分: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));

答案 1 :(得分:8)

要以最佳尺寸显示图标,您需要手动将其调整为正确尺寸。这种正确的大小可能因操作系统和首选项而异,因此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
}

答案 2 :(得分:8)

根据TrayIcon.setImageAutoSize(boolean)

  

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

     

如果自动尺寸为假,并且图像尺寸与托盘图标空间不匹配,则图像在该空间内按原样绘制 - 如果大于分配的空间,则将被裁剪。< / strong>

答案 3 :(得分:1)

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

这是从我的系统托盘中以100x100开始生成一个漂亮的图标。

值得注意的是,在视网膜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;
}