0

我创建了一个方法来更改按钮组中所有 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);
    }

    }

这在带有 Java 1.6.0_16 的 Ubuntu 下运行良好。

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

我用 gif 和 jpg 试了一下。我还将图像放入 jar 中并尝试从文件系统加载它们 - >相同的结果。

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

4

2 回答 2

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&F 没有使用这些图标,而是使用了自己的图标。也许尝试使用不同的 L&F 测试代码。

于 2010-03-02T01:17:37.090 回答
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().

于 2010-03-02T01:23:38.723 回答