将图像添加到JPanel

时间:2013-05-14 12:38:30

标签: java image swing jlabel embedded-resource

我目前正在尝试向我的JPanel添加一个刽子手图像。我已经标记了图像1-10并在每次用户得到错误答案时递增值(这是有效的)。到目前为止,我还没有能够使图像工作。如何正确插入我的图像?

if(!found){
  numError++;

  String userError = Integer.toString(numError);
  String jpg = userError.concat(".JPG");
  try{
    BufferedImage myImg = ImageIO.read(new File(jpg));
    JLabel hangman = new JLabel(new ImageIcon(myImg));
    hangman.setSize(200,100);
    hangman.setLocation(300, 20);
    add(hangman);
  }catch(IOException ex){
    ex.printStackTrace();
  } 
}
javax.imageio.IIOException: Can't read input file!
at javax.imageio.ImageIO.read(ImageIO.java:1301)
at HangmanPanel$1.actionPerformed(HangmanPanel.java:73)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
...

2 个答案:

答案 0 :(得分:2)

由于此图像将成为嵌入在Jar文件中的应用程序资源,因此必须通过URL访问图像有关如何形成该URL的概述,请参阅embedded resource info. page 。剩下的唯一棘手的事情是确切地确定要使用的String

  

我将.jpg文件放在src和bin文件夹的主目录中。

好的,如果图片被调用hungman.JPG,则String会找到它"/hungman.JPG"

特别注意

  1. 前导/告诉类加载器从'类路径的根'进行搜索。
  2. 名称的大小写必须完全正确。这与Windows和File实例无关,但它始终与URL有关。
  3. 注意:只要图片在运行时类上,通过URL访问图片就可以在Jar 运行 - 应用程序的路径。因此,即使IDE没有自动Jar类和资源,它仍然可以工作。

答案 1 :(得分:1)

尝试使用jpg.then的url直接创建imageIcon     JLabel hangman = new JLabel(new ImageIcon(urlOfImageFile));