2010-03-01 6 views
0

J'ai créé une méthode qui change l'icône de tous jradiobuttons d'un ButtonGroup:Modification JRadioButton icône sur 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); 
    } 

    } 

Cela fonctionne bien sous Ubuntu avec Java 1.6.0_16. Lorsque j'utilise la méthode sous Windows 7 avec Java 1.6.0_18, les icônes ne s'affichent pas. Ils sont simplement manquants. Le programme ne lance pas un Nullpointer ... il trouve les icônes, mais ne les affiche pas. Des idées? Il semble quelque peu difficile de croire que je ne peux pas utiliser une fonctionnalité aussi simple sous Windows.

Je l'ai essayé avec gif et jpg. J'ai également mis les images à l'intérieur du pot et j'ai essayé de les charger à partir du système de fichiers -> même résultat.

Éditer: Dans cette configuration, les fichiers sont chargés depuis le pot.

Répondre

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

Vous ne devriez pas appellerez getPath() il devrait juste être:

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

Il ne sera pas en mesure d'accéder à une ressource dans un bocal par voie et un ImageIcon peut charger une image en utilisant une URL très bien.

Si vous ne voyez toujours pas vos icônes, il se peut que le L & F que vous utilisez n'utilise pas ces icônes et utilise à la place les siennes. Peut-être essayer de tester le code avec un autre L & F.

+0

Je dois modi fi er votre réponse, puisque vous êtes arrivé à la même conclusion que moi mais que vous l'avez fait plus rapidement. ;-) –

+0

merci joe, apprécié :) – objects

2

Essayez de supprimer les appels à getPath(), comme ceci:

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

Le problème est que URL.getPath() vous donne une URL de chaîne, qui est pas nécessairement nom de fichier de chaîne valide du type attendu par le constructeur de chaîne ImageIcon. Heureusement, ImageIcon a un autre constructeur qui comprend URL objets, et donc il n'y a pas besoin d'appeler getPath().

+1

Et maintenant je vois que quelqu'un d'autre a compris ça aussi pendant que je travaillais dessus ... Ça va m'apprendre à poster des réponses avant que je sois sûr à 100% qu'ils sont correct et complet, n'est-ce pas? ;-) –