在JFrame和Windows任务栏中使用不同的图标

时间:2013-02-21 14:34:23

标签: java swing icons taskbar

有没有办法在JFrame和Windows任务栏上使用不同的图标?

当我设置JFrame.setIconImage(img)时,同一图像用作Windows图标。我可以在JFrame和Windows任务栏中使用不同的图标吗?

3 个答案:

答案 0 :(得分:8)

这项工作在Windows 7中运行标准Java 7:

List<Image> icons = new ArrayList<Image>();
icons.add(new ImageIcon("16.png").getImage());
icons.add(new ImageIcon("32.png").getImage());
f.setIconImages(icons);

图标必须完全 16x16和32x32。

答案 1 :(得分:3)

您可以使用setIconImages()提供不同大小的图标列表。 JRE将为每次使用选择最佳可用尺寸(因此当图标以更大尺寸显示时,可以显示更详细的版本)。

AFAIK没有计划的方式来显示特定用途的不同图标。

你可以使用setUndecorated(true)并自己渲染窗口装饰,但是要使其按预期工作(由于外观和感觉)并非易事。一个hacky解决方案可能是通过窗口对等组件(在运行时使用JDK源+反射)找到自己的方式,并为一个或另一个对等组件提供不同的图标。同样,这可能需要特定于活动L&amp; F的代码。

答案 2 :(得分:2)

我不能使用建议的解决方案,因为我有jdk 1.5作为要求......

所以,我这样做了:

public void setAppIcons(JFrame frame) {
    List<Image> images = new ArrayList<Image>();
    images.add(getImage(MessageUtils.getString("application.images.icon.app.32")).getImage());
    images.add(getImage(MessageUtils.getString("application.images.icon.app.16")).getImage());

    try {
        Class<?> [] types = {java.util.List.class};
        Method method = Class.forName("java.awt.Window").getDeclaredMethod("setIconImages", types);

        Object [] parameters = {images};
        method.invoke(frame, parameters);
    } catch (Exception e) {
        frame.setIconImage(images.get(0));
    }       
}

如果客户端在jre 1.6或major中运行应用程序,则应用程序将选择要设置的图像列表...

提出您的建议。