Swing支持*.ico文件吗?

11

设置 Swing 动作的图像:

Action action = ...
// ImageIcon icon = new ImageIcon(getClass().getResource("/icon.ico"));
ImageIcon icon = new ImageIcon(getClass().getResource("/icon_16x16.png"));
action.putValue(Action.SMALL_ICON, icon);

*.ico文件不会被渲染,只有png/jpg能够。


这是设计意图吗?

2个回答

13

支持的文件类型可能因制造商和版本而有所变化,但通常可以使用PNG、JPG和GIF文件。

import javax.imageio.ImageIO;

public class QuickTest {

    public static void main(String[] args) throws Exception {
        String[] types = ImageIO.getReaderFileSuffixes();
        System.out.println("This JRE supports image types:");
        for (String type : types) {
            System.out.println("Type: " + type);
        }
    }
}

输出在这里/现在

This JRE supports image types:
Type: bmp
Type: jpg
Type: wbmp
Type: jpeg
Type: png
Type: gif

1
我刚刚使用Oracle Java 8u74运行了这个测试,它仍然只支持这6种格式。 - randers
@RAnders00 在J2SE中,对于图像类型的支持并不是很好,并且请注意在另一个操作系统上可能会有所不同(因此不要认为集合是“确定”的)。另一方面,在运行时类路径中添加JAI,该列表不仅应显著地更长,而且在各种操作系统上也应更加一致。 - Andrew Thompson

8
原生的不行。但你可以看看 image4j,它在这方面提供了(我认为)非常好的支持。

很遗憾,ico文件允许您为不同的分辨率使用不同、更合适的图像。 - Tomáš Zato
@TomášZato 可能吧,但是 Windows 和 MacOS 都有自己的图标格式 :P。还有一些库允许您使用 SVG(矢量)图像,但您需要找到这些库。 - MadProgrammer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接