我创建了一个方法,可以从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中加载。
答案 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()
。