2013-04-11 1 views
1

Я хочу добавить картинку в мой графический интерфейс, но, похоже, она не может отображать изображение. (Может быть, он не может его найти?) У меня нет ошибок, все, что происходит, это пустой 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()); 

} 

} 
+0

Я начала задаваться вопросом если люди, которые задают этот вопрос, когда-либо думают искать на нем. Его нужно просить дважды в день. –

+1

Я бы порекомендовал использовать 'ImageIO' над' ImageIcon' для загрузки изображений, 'ImageIO' на самом деле генерирует исключение, если что-то пойдет не так. @AndrewThompson Зачем смотреть, когда вы можете спросить, и мы можем повторить себя: P - Кроме того, никакие проблемы elses не могут быть точно такими же, как мои собственные ...;) – MadProgrammer

+0

@MadProgrammer * «Я бы обычно использовал .. **' ImageIO.read() '** .." *, но для [анимированного GIF] (http://stackoverflow.com/questions/10836832/show-an-animated-bg-in-swing). –

ответ

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 для загрузки изображения. Вместо этого вы хотите, чтобы это изображение загружалось из пути к классам (в конечном счете, изнутри банки, содержащей ваше упакованное приложение).

Чтобы сделать это, используйте constructor taking a URL as argument и передать URL ресурса:

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

(при условии, Ace.png находится в том же пакете, что и класс TrevCard)