Pergunta

Criei um método que altera o ícone de todos os JRadiobuttons de um buttongroup:

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

    }

Isso funciona bem no Ubuntu com Java 1.6.0_16.

Quando uso o Methode no Windows 7 com o Java 1.6.0_18, os ícones não aparecem. Eles estão simplesmente faltando. A programação não joga um nullpointer ... encontra os ícones, mas não os exibe. Alguma ideia? Parece um pouco difícil de acreditar que não posso usar uma funcionalidade tão simples no Windows.

Eu tentei com GIF e JPG. Também coloquei as imagens dentro do frasco e tentei carregá -las no sistema de arquivos -> mesmo resultado.

EDIT: Nesta configuração, os arquivos são carregados do jar.

Foi útil?

Solução

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

Você não deveria estar ligando para getPath (), deveria ser apenas:

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

Ele não poderá acessar um recurso em um frasco por caminho e um imageicon pode carregar uma imagem usando um URL muito bem.

Se você ainda não está vendo seus ícones, pode ser que o L&F que você esteja usando não use esses ícones e use seu próprio. Talvez tente testar o código com um L&F diferente.

Outras dicas

Tente remover as chamadas para getPath(), assim:

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

O problema é que URL.getPath() fornece um url de string, que não é necessariamente um nome de string válido do tipo que o ImageIcon O construtor de string espera. Felizmente, ImageIcon tem outro construtor que entende URL objetos e, portanto, não há necessidade de ligar getPath().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top