2010-03-01 27 views
0

改變一個JRadioButton圖標我創建了從ButtonGroup的改變了這一切JradioButton將圖標的方法:在Windows 7

public void setRadioButtonIcons(final ButtonGroup gruppe){ 

     Enumeration<AbstractButton> gruppeEnum = gruppe.getElements(); 

    while (gruppeEnum.hasMoreElements()){ 
     AbstractButton radio = gruppeEnum.nextElement(); 
     Icon unselIcon = new ImageIcon(Thread.currentThread().getContextClassLoader().getResource("checkbox0.jpg").getPath()); 
     Icon selIcon = new ImageIcon(Thread.currentThread().getContextClassLoader().getResource("checkbox1.jpg").getPath()); 
     radio.setIcon(unselIcon); 
     radio.setSelectedIcon(selIcon); 
    } 

    } 

這在Ubuntu下正常工作與Java 1.6.0_16。

當我在windows 7下使用java 1.6.0_18的方法時,圖標不會顯示。他們只是失蹤。程序不會拋出Nullpointer ...它找到圖標,但不顯示它們。有任何想法嗎?這似乎有點難以置信,我不能在Windows下使用這種簡單的功能。

我試過用gif和jpg。我也把圖像放在jar裏面,並試圖從文件系統中加載它們 - >相同的結果。

編輯:在此配置中,文件從jar中加載。

回答

2
Icon unselIcon = new ImageIcon(Thread.currentThread().getContextClassLoader().getResource("checkbox0.jpg").getPath()); 
    Icon selIcon = new ImageIcon(Thread.currentThread().getContextClassLoader().getResource("checkbox1.jpg").getPath()); 

你不應該調用的getPath()那裏,應該只是:

Icon unselIcon = new ImageIcon(Thread.currentThread().getContextClassLoader().getResource("checkbox0.jpg")); 
    Icon selIcon = new ImageIcon(Thread.currentThread().getContextClassLoader().getResource("checkbox1.jpg")); 

這將無法通過路徑訪問的資源在一個罐子和一個ImageIcon可以加載使用URL的圖像就好了。

如果您仍然沒有看到您的圖標,那麼您可能正在使用的L & F不使用這些圖標,而是使用它自己的圖標。也許嘗試用不同的大號測試代碼& F.

+0

我必須修改你的答案,因爲你得出了和我一樣的結論,但它做得更快。 ;-) – 2010-03-02 02:16:26

+0

感謝喬,讚賞:) – objects 2010-03-02 02:52:29

2

嘗試卸下來getPath()調用,就像這樣:

public void setRadioButtonIcons(final ButtonGroup gruppe) { 
    Enumeration<AbstractButton> gruppeEnum = gruppe.getElements(); 
    while (gruppeEnum.hasMoreElements()){ 
     AbstractButton radio = gruppeEnum.nextElement(); 
     Icon unselIcon = new ImageIcon(Thread.currentThread().getContextClassLoader().getResource("checkbox0.jpg")); 
     Icon selIcon = new ImageIcon(Thread.currentThread().getContextClassLoader().getResource("checkbox1.jpg")); 
     radio.setIcon(unselIcon); 
     radio.setSelectedIcon(selIcon); 
    } 
} 

的問題是,URL.getPath()給你一個字符串的URL,這不一定是ImageIcon字符串構造函數期望的排序的有效字符串文件名。幸運的是,ImageIcon有另一個可以理解URL對象的構造函數,所以不需要調用getPath()

+1

現在我看到別人也知道這一點,因爲我正在研究它......這將教我在100%確定他們是正確和完整,不是嗎? ;-) – 2010-03-02 01:25:30