Как добавить изображение в графический интерфейс

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

}

}

person Joshua Dean    schedule 11.04.2013    source источник
comment
Я начинаю задаваться вопросом, думают ли люди, которые задают этот вопрос, искать его. Его нужно спрашивать два раза в день.   -  person Andrew Thompson    schedule 12.04.2013
comment
Я бы рекомендовал использовать ImageIO вместо ImageIcon для загрузки ваших изображений, ImageIO на самом деле выдает исключение, когда что-то идет не так. @AndrewThompson Зачем смотреть, когда вы можете спросить, а мы можем повторить: P - Кроме того, ни у кого другого проблемы не могут быть точно такими же, как у меня ... ;)   -  person MadProgrammer    schedule 12.04.2013
comment
@MadProgrammer Обычно я бы использовал .. ImageIO.read().., но для анимированный GIF..   -  person Andrew Thompson    schedule 12.04.2013
comment
@AndrewThompson Хорошее замечание ... но я не могу вспомнить, когда в последний раз мне приходилось использовать GIF (грустно мне;))   -  person MadProgrammer    schedule 12.04.2013
comment
@MadProgrammer Что, даже не для летающего пони? :(   -  person Andrew Thompson    schedule 12.04.2013
comment
@AndrewThompson Ознакомьтесь с это   -  person MadProgrammer    schedule 12.04.2013
comment
@MadProgrammer Ха. Я проголосовал за это, даже не заметив изображения! Время для новых (или любых) очков. ;)   -  person Andrew Thompson    schedule 12.04.2013


Ответы (2)


Вместо

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

Использовать:

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

Конструктор ImageIcon который вы используете, принимает в качестве аргумента имя файла. Таким образом, этот конструктор пытается найти этот файл на диске в текущем каталоге (поскольку путь, который вы передали, является относительным путем). Текущий каталог не является каталогом, в котором находится исходный файл Java. Это каталог, из которого запускается команда Java, используемая для запуска вашего приложения.

Вы не хотите использовать файловый ввод-вывод для загрузки изображения. Вместо этого вы хотите, чтобы это изображение было загружено из пути к классам (в конечном счете, изнутри jar, содержащего ваше упакованное приложение).

Для этого используйте конструктор принимает URL в качестве аргумента и передает URL ресурса:

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

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

person JB Nizet    schedule 11.04.2013