Изменение значка JRadioButton в Windows 7 - PullRequest
0 голосов
/ 01 марта 2010

Я создал метод, который изменяет значок всех jradiobuttons из группы кнопок:

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, значки не появляются. Они просто отсутствуют. Программа не выдает нулевой указатель ... находит значки, но не отображает их. Есть идеи? Кажется, трудно поверить, что я не могу использовать такую ​​простую функциональность под Windows.

Я попробовал это с GIF и JPG. Я также поместил изображения в банку и попытался загрузить их из файловой системы -> тот же результат.

Редактировать: в этой конфигурации файлы загружаются из банки.

Ответы [ 2 ]

2 голосов
/ 02 марта 2010

Попробуйте удалить вызовы на 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().

2 голосов
/ 02 марта 2010
    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 не использует эти значки, а вместо этого использует свои собственные. Возможно, попробуйте протестировать код с другим L & F.

...