如何更改程序图标

3

我尝试查找多个关于如何在Java中更改程序图标的教程,但似乎都不起作用。我还想知道它可以是什么类型的图像,例如.ico或.png,并且必须是什么大小。


1
Linux使用.png作为文件图标的格式,而Windows则使用.ico。 - Bakudan
1
如果我要制作跨平台程序,应该使用什么格式? - Matthewj
2个回答

5
我假设您正在使用JFrame,那么您需要使用setIconImage(java.awt.Image)方法设置图标:
File/InputStream/URL x = ...
Image icon = ImageIO.read(x);
frame.setIconImage(icon);

图像文件格式是无关紧要的,只要ImageIO可以读取它(JPEG、GIF、PNG、TIFF,即使需要时也可以使用BMP)。
一个例子:
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class Main {

    public static void main(final String[] args) throws Exception {
        JFrame frame = new JFrame("Custom Icon");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 200);

        // something off the Google Images front page
        final URL url = new URL("http://t3.gstatic.com/images?q=tbn:ANd9GcQbcDkaRcrbsYFUcE6Q7n56_LJr-r4mDqYTOTtPKG9J0MzZcV6V");
        frame.setIconImage(ImageIO.read(url));

        frame.setVisible(true);
    }

}

编辑:如何获取您的图标的URL

您应该将图像文件(图标等)与源代码一起放置,可以放在您的src文件夹中的自己的子文件夹中,并将它们作为“资源”进行访问。查看Java教程中的如何使用图标以获取到资源的URL对象。


1
我建议使用setIconImages(icons)来设置多个图标。至少在Win7中,你希望窗口标题栏有一个16x16的图标,任务栏有一个32x32的图标。如果只设置一个16x16的图标,任务栏图标会看起来很糟糕。我想其他操作系统可能也需要不同的图标尺寸。 - Kevin K
@Matthewj,你不能将String传递给ImageIO.read(),它必须是一个InputStreamURLFile对象。我在上面的答案中添加了一个完整的示例--我更新了我的答案,以展示如何获取图像资源的URL。 - Philipp Reichart
@Matthewj,此外,您必须在JFrame的实例上调用setImageIcon()/setImageIcons(),这些不是静态方法。 - Philipp Reichart

1

我认为@Philipp已经很清楚地表明了,x必须是一个FileInputStreamURL,而不是像你尝试的那样是一个String

现在,你还需要有一个FrameJFrame才能有一个图标!

我假设这是在你的main方法中。 要创建一个框架,请尝试

JFrame frame=new JFrame();
frame.setVisible(true);

跟着 @Philipp 的代码。

--

我突然想到你可能是指操作系统中程序快捷方式的图标。这不是在Java中完成的,而是在你的操作系统中完成的,除非你使用Java Web Start。


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