java – Windows 8扭曲我的TrayIcon

Windows 8似乎使托盘图标为20 x 20像素.似乎 Java仍然认为它们应该是16 x 16像素.这会导致一些不好的变形,因为Java会缩小任务,然后Windows会缩小备份.以下示例使用这三个图像创建三个这样的托盘图标(注意失真):

.

import java.awt.Image;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;

public class TrayTest
{
    public static void main(String[] args) throws Exception
    {
        final SystemTray tray = SystemTray.getSystemTray();

        TrayIcon trayIcon16 = new TrayIcon(getimage("16pxBlue.png"));
        tray.add(trayIcon16);

        TrayIcon trayIcon20 = new TrayIcon(getimage("20pxRed.png"));
        tray.add(trayIcon20);

        TrayIcon trayIcon20autoSize = new TrayIcon(getimage("20pxGreen.png"));
        trayIcon20autoSize.setimageAutoSize(true);
        tray.add(trayIcon20autoSize);
    }

    public static Image getimage(String resource)
    {
        return Toolkit.getDefaultToolkit().createImage(TrayTest.class.getResource(resource));
    }
}

这是整个东西看起来像放大像素线添加(打开图像在一个新的选项卡将给你一个更清晰的视图):

我的问题:
如何防止Java / Windows 8扭曲我的图标?

解决方法

16×16的大小显然硬编码到Java TrayIcon实现中.我没有看到在运行时更改它的方法.从 WTrayIconPeer.java
final static int TRAY_ICON_WIDTH = 16;
final static int TRAY_ICON_HEIGHT = 16;

这需要是reported as a bug.

作为解决方法,使用平滑的反锯齿图标将使失真不明显.

如果您绝望,您可以使用JNA或JNI编写(或找到)替代托盘图标的实现.在WTrayIconPeer.java和
awt_TrayIcon.cpp中的相应本地代码可以作为指导.看起来好像很多工作.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...