2013-04-11 64 views
1

我想添加一个图片到我的GUI,但它似乎无法显示图片。 (也许它找不到它?)我没有得到任何错误,所发生的只是一个空白的JFrame弹出。 我使用Eclipse和图片是在同一个包,我在工作如何添加图像到GUI

代码:

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()); 

} 

} 
+0

我开始怀疑如果问这个问题的人有想过去搜索它。必须每天问两次。 – 2013-04-11 22:17:18

+1

我建议在'ImageIcon'上使用'ImageIO'来加载图像,'ImageIO'实际上会在出现问题时引发异常。 @AndrewThompson为什么看你什么时候可以问,我们可以重复自己:P - 另外,没有人可以像我自己一样... ...) – MadProgrammer 2013-04-11 23:38:23

+0

@MadProgrammer *“我通常会使用.. **' ImageIO.read()'** ..“*但为[动画GIF](http://stackoverflow.com/questions/10836832/show-an-animated-bg-in-swing).. – 2013-04-12 00:01:07

回答

1

而不是

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

用途:

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

您使用的ImageIcon constructor以文件名作为参数。因此,这个构造函数试图在当前目录的磁盘上找到这个文件(因为你传递的路径是一个相对路径)。当前目录不是Java源文件所在的目录。这是用于执行您的应用程序的java命令的启动目录。

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

要做到这一点,使用constructor taking a URL as argument,并通过资源的URL:

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

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