2013-02-21 38 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

相關問題