在Windows 7上更改JRadioButton图标

时间:2010-03-01 17:46:18

标签: java swing jradiobutton

我创建了一个方法,可以从buttongroup中更改所有jradiobutton的图标:

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

    }

这在使用Java 1.6.0_16的Ubuntu下工作正常。

当我在Windows 7下使用java 1.6.0_18的方法时,图标不会显示。他们只是失踪了。该程序不会抛出Nullpointer ...它会找到图标,但不会显示它们。有任何想法吗?似乎有点难以相信我不能在windows下使用这么简单的功能。

我用gif和jpg尝试过。我还将图像放在jar中并尝试从文件系统加载它们 - &gt;同样的结果。

编辑:在此配置中,文件从jar中加载。

2 个答案:

答案 0 :(得分: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"));

它将无法通过路径访问jar中的资源,而ImageIcon可以使用URL加载图像。

如果您仍然没有看到您的图标,那么您使用的L&amp; F可能不会使用这些图标而是使用自己的图标。也许尝试使用不同的L&amp; F来测试代码。

答案 1 :(得分: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()