我有一个简单的swing应用程序,其中包含一个包含各种组件的JFrame。在JFrame上,我有一个扩展JPanel的自定义工具栏类。在JPanel上,我计划添加带图像图标的按钮。我的目录结构如下:
jlfgr-1_0.jar
)问题是我想避免将单个图像文件复制到图像包中。我宁愿只是直接从jar文件加载图像。我有私有方法返回相应的图标。例如,如果我将图像文件拖到图像包中并调用:
,则此方法有效 button.setIcon(createIcon("/images/Save16.gif"));
private ImageIcon createIcon(String path) {
URL url = getClass().getResource(path);
ImageIcon icon = new ImageIcon(url);
if(url == null) {
System.err.println("Unable to load image: " + path);
}
return icon;
我知道这是基本的,但是如何在我当前的设置中直接从jar文件中获取我的图像? 感谢。
答案 0 :(得分:1)
由于javax.imageio.ImageIO
:
private ImageIcon createIcon(String path) {
BufferedImage image = ImageIO.read(getClass().getResourceAsStream(path));
ImageIcon icon = new ImageIcon(image);
return icon;
}
答案 1 :(得分:0)
这是另一种方式。图片位于src/images
BufferedImage myPicture = null;
try {
myPicture = ImageIO.read(this.getClass().getResource("images/Picture2.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
try {
myPicture = ImageIO.read(this.getClass().getResource("images/broken_image.jpg"));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
JLabel picLabel = new JLabel(new ImageIcon(myPicture));
panel.add(picLabel);