2013-02-21 62 views
2

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

当我设置JFrame.setIconImage(img)这个相同的图像用作Windows图标。我可以在JFrame和Windows任务栏上使用不同的图标吗?

+1

AFAIK,只有当JFrame被图标化时,通过WindowListener监听 – mKorbel 2013-02-21 14:43:00

+0

是的,但是JFrame中使用的相同图标显示在Windows任务栏中。我想使用不同的图标。可能吗? – 2013-02-21 14:58:23

回答

2

我cound不使用建议的解决方案,因为我有JDK 1.5的要求...

所以,我这样做:如果客户端运行在JRE中的应用

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)); 
    }  
} 

1.6主要,应用程序将选择图像列表来设置...

Tks为您的建议。

3

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

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

你可以使用setUndecorated(true)并渲染窗口装饰,但它的重要性使得它可以像预期的那样工作(看起来&的感觉)。一个冒险的解决方案可能是通过窗口对等组件(在运行时使用JDK源代码+反射)找到自己的方式,并为其中一个或另一个对等组件提供不同的图标。同样,这可能需要特定于活动L码& F.

+0

我正在使用Java 1.5,并且此方法setIconImages()在此版本中不可用=/ – 2013-02-21 17:35:22

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); 

图标必须正好 16×16和32×32。

+0

*“图标必须完全** ** 16x16和32x32。”*否否。我只是尝试与17x17和31x31图标,它的工作如广告。话虽如此,我不知道什么是精确的“跨越”,并且不要强迫JRE(或OS)在运行时通过既不明显也不可控的方法调整图像大小。 – 2013-02-21 16:54:47

+0

我正在使用Java 1.5并且此方法setIconImages()在此版本中不可用=/ – 2013-02-21 17:35:47

+0

图标大小在[此问题]中讨论(http://stackoverflow.com/questions/18224184/sizes-of-frame-icons - 二手式摆动)。 – pvorb 2014-06-26 12:28:50

相关问题