在Windows上更改一个JRadioButton图标7
-
23-09-2019 - |
题
我创建了从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);
}
}
此工作正常的Ubuntu下与Java 1.6.0_16。
当我使用用java 1.6.0_18视窗7下的梅索德,这些图标没有apear。他们只是缺少。该PROGRAMM不会抛出一个空指针...它找到的图标,但不显示它们。有任何想法吗?这似乎有点难以置信,我无法在Windows下使用这样一个简单的功能。
我与GIF和JPG尝试过。我也把图像中的罐内,并试图从文件系统加载它们。 - >相同的结果
编辑:在该配置中,所述文件是从罐装载
解决方案
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测试代码。
其他提示
尝试移除到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()
。
不隶属于 StackOverflow