如何将图像添加到GUI

时间:2013-04-11 21:47:03

标签: java image swing embedded-resource imageicon

我想在我的GUI中添加一张图片,但它似乎无法显示图片。 (也许它无法找到它?)我没有错误,所有发生的事情都是弹出一个空白的JFrame。 我正在使用Eclipse,图片与我正在使用的相同包中。

代码:

package josh_package;

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import java.io.File;
import java.io.IOException;
import java.util.logging.Logger;
import java.awt.Image;
import javax.imageio.ImageIO;


public abstract class TrevCard extends JPanel implements ActionListener{

public static void main(String[] args)
{
    JFrame f = new JFrame("Here's Your Card!");
    JLabel label = new JLabel();  
    label.setIcon(new ImageIcon("Ace.png"));

     f.add(label);
     f.setLocationRelativeTo(null);
     f.setSize(600, 300);
     f.setVisible(true);

System.out.println("This is a program for cards!");
PlayingCard MyCard;
    MyCard = new PlayingCard(5,2);

    System.out.println(MyCard.GetValue());
    System.out.println(MyCard.GetSuit());

}

}

2 个答案:

答案 0 :(得分:2)

您正在使用的ImageIcon constructor将文件名作为参数。因此,此构造函数尝试在当前目录中的磁盘上查找此文件(因为您传递的路径是相对路径)。当前目录不是Java源文件所在的目录。它是用于执行应用程序的java命令的目录。

您不想使用文件IO加载图片。相反,您希望从类路径加载此图像(最终,从包含打包应用程序的jar内部)。

为此,请使用constructor taking a URL as argument,并传递资源的网址:

new ImageIcon(TrevCard.class.getResource("Ace.png"));

(前提是Ace.png与TrevCard类在同一个包中)

答案 1 :(得分:1)

而不是

label.setIcon(new ImageIcon("Ace.png"));

使用:

java.net.URL imgURL = TrevCard.class.getResource("Ace.png");
label.setIcon(new ImageIcon(imgURL));